Excel VBAを使ってIEなどのプログラムのクライアント領域の
ウインドウのサイズを指定・変更したいと考えています。

http://www.excel-vba.net/excel-api-020.html

このページのコードを使ってサイズの取得だけはできるようになりました。

次に設定を行いたいのですが

http://home.att.ne.jp/zeta/gen/excel/c04p58.htm

このページにあるように


Dim window1 As Window
Set window1 = Windows("Google - Internet Explorer") 'アプリケーションウィンドウを対象
window1.WindowState = xlNormal '通常表示に設定します。
window1.Width = 800 'ウィンドウ幅を800に設定
window1.Height = 300 'ウィンドウの高さを300に設定



とやってみましたが
インデックスが有効範囲にありません
というエラーが出てしまいます。

どうすれば良いでしょうか?

あと気になっているのですが
幅及び高さの単位はポイントです。(ピクセルでは無いので注意して下さい)。
と書かれてありますが、
ピクセルからポイントへはどのように換算すれば良いのでしょうか?

質問者からの補足コメント

  • ありがとうございます。

    ウインドウの位置・サイズの変更はできました。
    ただ一つ問題なのですが

    SetWindowPosではモニター座標でのクライアント領域の座標を指定する必要があります。
    一方で、

    GetWindowRectではモニター座標(0,0)を原点とした非クライアント領域の位置座標
    GetClientRectではクライアント座標(0,0)を原点としたクライアント領域の位置座標
    を得ることができます。
    しかしながらこれらの方法を組み合わせても
    クライアント領域のモニター座標を得ることができません。

    どうすればモニター座標(0,0)を原点とした
    クライアント領域の座標を得ることができますでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/11/20 23:27

このQ&Aに関連する最新のQ&A

A 回答 (1件)

2つ目のリンクの説明はExcel内のウィンドウを扱うものですから、質問の件の参考にはなりません。


1つ目のリンクの例のように、WindowsAPIを呼び出す必要あります。
WindowsAPIはC言語の関数の体裁をしていますので、理解するには若干のC言語の知識が必要です。

ウィンドウのサイズ変更は SetWindowPos 関数でできました。関数の説明はここにあります。
https://msdn.microsoft.com/ja-jp/library/cc41120 …

-----------------------------------------------------
Option Explicit

'ウィンドウ位置を維持する
Public Const SWP_NOMOVE = &H2&
'ウィンドウのZオーダーを維持する
Public Const SWP_NOZORDER = &H4&

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String _
) As Long

Private Declare Function SetWindowPos Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal hWndInsetAfter As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal uFlags As Long _
) As Long

'メモ帳のウィンドウサイズを変更するサンプル
Public Sub ChangeRect()
Dim hWnd As Long
hWnd = FindWindow(vbNullString, "無題 - メモ帳")

Call SetWindowPos(hWnd, -1, -1, -1, 400, 300, SWP_NOMOVE Or SWP_NOZORDER)
End Sub
この回答への補足あり
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qファイルサイズがpost_max_sizeを超える場合のエラー処理について

PHPでアップロードファイルのサイズチェックに関する処理で困っています。
アップロードファイルのサイズチェックを行う場合はPHPスクリプト内でスーパーグローバール変数の$_FILES[フォーム名]['size']からサイズチェックを行うのが一般的であると考えています。
ところが、php.iniのパラメーターpost_max_sizeを超えるサイズのファイルをアップロードしようとするとファイルのアップロードが行われないため$_FILES[フォーム名]['size']でのチェックも行えずユーザーにファイルサイズに起因するエラーであることを通知することが出来ません。
そこで、お知恵をお借りしたいのはpost_max_sizeを超えるサイズのファイルをアップロードした際(またはしようとした際)に、ユーザーにファイルサイズに起因するエラーであることを知らせる方法はあるのでしょうか?

方法の例として以下の2つを見つけたのですが、いずれもユーザーに的確にエラーを返すことが出来ません。
1.HTMLのFORMタグ内にMAX_FILE_SIZEを指定する。
 → 指定した値より大きなファイルをアップロードすると画面がリロードされたような動きとなりフォームがクリアされます。
PHPスクリプトに処理がわたらないようでユーザーにエラーを返せません。(IE8 / Apache2.2 + PHP5の場合)

2.ブラウザ側スクリプトでファイルサイズを取得する
 → IE限定の方法しかないためIE以外でも可能な方法を期待しています。

なにか良い方法をご存知の方はお力を貸してください。

PHPでアップロードファイルのサイズチェックに関する処理で困っています。
アップロードファイルのサイズチェックを行う場合はPHPスクリプト内でスーパーグローバール変数の$_FILES[フォーム名]['size']からサイズチェックを行うのが一般的であると考えています。
ところが、php.iniのパラメーターpost_max_sizeを超えるサイズのファイルをアップロードしようとするとファイルのアップロードが行われないため$_FILES[フォーム名]['size']でのチェックも行えずユーザーにファイルサイズに起因するエラーであるこ...続きを読む

Aベストアンサー

ANo.1です。

実際に確認してみました。確かにpost_max_sizeを超える場合はポストデータ自体が取得できませんでした。
適当なことを書いていたようです、申し訳ないです。

で、ちょっと調べてみたところ、$_POST、$_FILESは取得できなくても$_SERVERのCONTENT_LENGTHで判断するという方法があるようです。
http://q.hatena.ne.jp/1193396523

QExcel (2013) VBAでもし最大表示した場合のウインドウサイズの取得方法

慣れない言語で悪戦苦闘しています。
(アクティブな)ウインドウをクライアント領域一杯まで広げたときのサイズを取得する方法を教えてください。
Application.WindowState = xlMaximizedしたあと、
Windows("ブック名").Width、Windows("ブック名").Heightで取れるかと
思ったのですが、これではxlNormalの時のサイズが返ってきてしまうようです。
目的は、右下一杯までウインドウを広げて、左上は下のウインドウが見えるよう、
少し隙間をあけて開きたいためです。

Aベストアンサー

Application.WindowState = xlMaximized という書き方をやめ、

Windows("ブック名").WindowState = xlMaximized
Windows("ブック名").Width
Windows("ブック名").Height

という書き方に変更してみてください。("ブック名" のところで指定するブックをすべて同一のブックにする)

おそらくですが、
Application.WindowState = xlMaximized で最大化したウィンドウと
Windows("ブック名").Width でサイズを取得しようとしているウィンドウが違っているのではないかと思います。
最大化したブックで見えなくなっていますが、その後ろで Windows("ブック名") は xlNormal なままでいると思います。

Excel 2013 は SDI になりました。(SDI と MDI の違いは分かりますか?)
ブックを複数開いた状態で、すべてのブックが独立した Excel のウィンドウになっていると思います。
なので
Application.WindowState = xxx で操作対象になるのは 「現在アクティブなブックのウィンドウ」 であり、
ActiveWindow.WindowState = xxx
と同じ事になっているんじゃないかと。


Excel が MDI から完全な SDI に変わったことで、私の中で当時大変大きな話題になった記憶があります。。。

Application.WindowState = xlMaximized という書き方をやめ、

Windows("ブック名").WindowState = xlMaximized
Windows("ブック名").Width
Windows("ブック名").Height

という書き方に変更してみてください。("ブック名" のところで指定するブックをすべて同一のブックにする)

おそらくですが、
Application.WindowState = xlMaximized で最大化したウィンドウと
Windows("ブック名").Width でサイズを取得しようとしているウィンドウが違っているのではないかと思います。
最大化したブックで見えなくなっ...続きを読む

Q洋服のサイズ表示(組曲のsize2は?)

洋服のサイズ表示って何種類かありますよね。よく買うお店の表示は38・40、9号・11号なのですが先日「組曲」で買ったニットは「SIZE2」でした。表示サイズは「バスト81~85 身長158~164」です。これは、38(9号)なのでしょうか?
それ以外の服をよく見なかったのですが、組曲には「SIZE1」もあるのですか?

Aベストアンサー

size1.2.3
1:7号
2:9号
3:11号です。

これは、一昨日組曲もあつかっているお店の店員さんに聞いたばかりですのでまちがいありません。

QExcel VBA フォームサイズ変更について

ExcelVBAでボタンを押すとフォームのサイズを拡大したいのですが、できるのでしょうか?
ご存知の方がいればご教授ください。

<考えている事>
初期フォームが表示され、いくつか選択項目があります。
「詳細条件」ボタンを押すと
同じフォーム上に詳細条件の選択項目を出したいのです。
(たとえばフォームが下に広がるイメージ)


分かりにくい部分があれば補足します。

WindowsXP+Excel2002

Aベストアンサー

はじめまして

できると思います。
あらかじめ大きなフォームを作っておいて、そこに全ての項目を設定しておきます。
で、フォーム自体は半分とかの大きさにしておいて、次のようなコードを書けばよいのではないでしょうか?

'詳細ボタン
Private Sub CommandButton1_Click()
 UserForm1.Height = UserForm1.Height * 2
 CommandButton1.Enabled = False
End Sub

'設定完了ボタン
Private Sub CommandButton2_Click()
 UserForm1.Height = UserForm1.Height / 2
 CommandButton1.Enabled = True
End Sub

うまく伝わりましたか?

Qベビー服のサイズ選びについて‼(><*) いま、70sizeのロンパースや肌着がちょうどいいくらいで

ベビー服のサイズ選びについて‼(><*)
いま、70sizeのロンパースや肌着がちょうどいいくらいです。
上下別の服をまだ持ってません。
メルカリでデニム素材の可愛いベビーブルマとカボチャパンツを見つけて購入したいのですが、おむつモコモコのことも考えてパンツ系はワンサイズ大きいものを選んだ方がいいのでしょうか?

Aベストアンサー

おむつの事は
気にしなくて大丈夫ですよ(´∀`)うちの子は 足が
ムチムチなのでオムツの
モコモコより ムチムチで
ゴムを気にしてきせてます٩(*´︶`*)۶ですがデニム素材
と言うのは 細身や
動きにくいなど
あるかもしれないので
ワンサイズ上が
いいかもしれませんね٩(*´︶`*)۶関係ないですが
我が家の次女は七ヶ月で80です。。。w

QVBAでIEの操作→サブウインドウを操作するには

以下の「oya.html」「ko.html」があります。
それを、VBAで「oya.html」を開き、「子ウインドウを開く」リンクをクリックさせて、開いた「ko.html」の「子ウィンドウを閉じる」リンクをクリックさせたいのだがどうすればよろしいでしょうか?
---------VBA ↓---------------------------------------------
Private Sub CommandButton1_Click()
Dim objIE As Object 'Object型
'IEのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "file:///C:/oya.html"'「oya.html」を開く
'----表示待ち↓--------
Do While objIE.Busy
 DoEvents
Loop
Do While objIE.document.ReadyState <> "complete"
DoEvents
Loop
'----表示待ち↑----------
For Each linkitem In objIE.document.all.tags("A") 'Aタグ
If linkitem.innerText = "子ウインドウを開く" Then
linkitem.Click
End If
Next
'----表示待ち↓--------
Do While objIE.Busy
DoEvents
Loop
Do While objIE.document.ReadyState <> "complete"
DoEvents
Loop
'----表示待ち↑----------
  For Each linkitem In objIE.document.all.tags("A") 'Aタグ
If linkitem.innerText = "子ウィンドウを閉じる" Then
linkitem.Click
End If
Next
End Sub
---------------↑-------------------------------------------
--------oya.html ↓-----------------------------------------
<html>
<head><script>
function showModal(){
var value = showModalDialog('ko.html');
}
</script></head>
<TITLE>親ウィンドウ</TITLE>
<body>
<a href="javascript://" onclick="showModal()">子ウインドウを開く</a><br>
</body>
</html>
-----------------↑-----------------------------------------
--------ko.html ↓--------------------------------------------
<html>
<TITLE>子ウィンドウ</TITLE>
<body>
<a href="#" onClick="window.close(); return false;">子ウィンドウを閉じる</a><br>
</body>
</html>
------------------↑-----------------------------------------

以下の「oya.html」「ko.html」があります。
それを、VBAで「oya.html」を開き、「子ウインドウを開く」リンクをクリックさせて、開いた「ko.html」の「子ウィンドウを閉じる」リンクをクリックさせたいのだがどうすればよろしいでしょうか?
---------VBA ↓---------------------------------------------
Private Sub CommandButton1_Click()
Dim objIE As Object 'Object型
'IEのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = Tru...続きを読む

Aベストアンサー

状況を理解しました。
子ウィンドウを、showModalDialog で開いている為に、子ウィンドウを閉じるまで Excel に制御が返ってこないワケですね。
VBA で制御できるレベルではなさそうです。一応参考 URL を添付しておきますが。。。

http://www.usefullcode.net/2006/12/ieihtmldocument2.html
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200509/05090016.txt

Q共用体のサイズをsizeofで

共用体の全体のサイズを調べようと、

printf("%u",sizeof(test)); //testは共用体の型名です

としたら、コンパイルエラーが出ました。エラーの内容は「'test':定義されていない識別子です」でした。共用体のサイズはsizeofですることができると聞いたのですがどうやるのでしょう?特に共用体全体のサイズを知りたいです。回答よろしくお願いします。

Aベストアンサー

testではなく、union testでは?

それと、sizeof演算子の評価結果はsize_t型ですので、printfの書式は"%zu"にする必要があります。
古い規格では"%zu"はサポートされませんので、(unsigned int)sizeof(...)のように適当にキャストしてください。

Qウインドウのサイズ変更

すみません、VB初心者です。

Accsee VBAで作られたプログラムを修正しています。
今、ウインドウのサイズが最大化されているようなので、
サイズを変更したいのですが、
Form_Open()のところで、
DoCmd.MoveSize()をCallしてサイズを指定しているのですが、
も最大化されたままなのです。他に何か設定があるのでしょうか。
画面としてはフォームにさらにサブフォームを表示していて(意味わかりますか?)
フォームも元から作ってあってほとんど修正はしていません。

よろしくお願い致します。

Aベストアンサー

ここが参考になると思います。解決できるといいですね。

参考URL:http://www.moug.net/tech/acvba/0010011.htm

Qsize サイズ

ご回答よろしくお願いします(>_<)

SIZE1とはMのことではないのでしょうか?? Sですか??
それともブランドによって違いが出るのでしょうか??
0=S 1=M と認識していますが正しいのでしょうか??
よろしくお願いします

Aベストアンサー

こんばんは。

ブランドによって異なります。
基本的には“S=1”の場合が多いかとは思いますが。

WEBショップでしたら、サイズ表記より、
採寸を目安にした方が安全です。

ご参考になれば幸いです^^

QEXCEL VBA でウインドウの左上のアドレスを取得するには

お世話になります。

ActiveSheetの左上のセルの座標を取得したいのですが
何かいい方法はないでしょうか。

よろしくお願いします。

Aベストアンサー

MsgBox ActiveWindow.VisibleRange.Cells(1).Address


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング