
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に設定
とやってみましたが
インデックスが有効範囲にありません
というエラーが出てしまいます。
どうすれば良いでしょうか?
あと気になっているのですが
幅及び高さの単位はポイントです。(ピクセルでは無いので注意して下さい)。
と書かれてありますが、
ピクセルからポイントへはどのように換算すれば良いのでしょうか?
No.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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBAで画面の大きさを取得する方法!
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
【Excel VBA】ウィンドウサイズ変更イベント
Excel(エクセル)
-
8
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
9
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
10
EXCEL VBAから他アプリケーションを操作することは可能ですか?
Visual Basic(VBA)
-
11
VBで外部プログラムを位置のみ指定して実行したい
Visual Basic(VBA)
-
12
エクセルVBAでNumLockキーの状態を確認する
Excel(エクセル)
-
13
開いたとき常に同じ大きさ・位置で表示したい
Windows 7
-
14
MoveWindowで位置だけ変更するには?
Visual Basic(VBA)
-
15
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
16
【VBA】 Alt+PrintScreenにてアクティブウィンドウのスクショを貼付する方法
Excel(エクセル)
-
17
SetWindowPosについて
Visual Basic(VBA)
-
18
タブの色を変更する方法
Visual Basic(VBA)
-
19
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
20
xlNormalとは?
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
Edge Chrom などの超初心者質問...
-
デスクトップ画面を4分割するには
-
ウィンドウの2重起動を防止したい
-
1クリックでモーダルを開いてか...
-
window.open( ) の第2引数
-
Access2007では、フォームのウ...
-
ポップアップと作業ウィンドウ...
-
window.close()で確認メッセー...
-
VBAで任意のウインドウのサイズ...
-
ページ内でYouTubeの動画を見れ...
-
スクリプトって、何ですか?ど...
-
Outlookでこのような表示がされ...
-
デジタル時計の時刻合わせの方...
-
McAfeeのポップアップ
-
Youtubeのバグ
-
マイページはどこを開くの
-
PDFファイルの向きを縦から横に...
-
PDFを(htmlのように)無限に縦...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのシート上に別のシー...
-
Javascript_submit()完了後に処...
-
Edge Chrom などの超初心者質問...
-
VBの画面で、全ウィンドウを一...
-
デスクトップ画面を4分割するには
-
ウィンドウの2重起動を防止したい
-
ポップアップと作業ウィンドウ...
-
VBAで任意のウインドウのサイズ...
-
javascriptで開いたウィンドウ...
-
1クリックでモーダルを開いてか...
-
インタネットからPDFファイルだ...
-
子ウィンドウより親ウィンドウ...
-
リンク時、親ウインドウを最前...
-
子ウィンドウの存在確認
-
孫ウインドウを閉じたら親をリ...
-
子ウィンドウを常に手前表示、...
-
子ウィンドウから親ウィンドウ...
-
履歴を残さないResponse.Redire...
-
ウインドウの親子連携について
-
子ウィンドウから親ウィンドウ...
おすすめ情報
ありがとうございます。
ウインドウの位置・サイズの変更はできました。
ただ一つ問題なのですが
SetWindowPosではモニター座標でのクライアント領域の座標を指定する必要があります。
一方で、
GetWindowRectではモニター座標(0,0)を原点とした非クライアント領域の位置座標
GetClientRectではクライアント座標(0,0)を原点としたクライアント領域の位置座標
を得ることができます。
しかしながらこれらの方法を組み合わせても
クライアント領域のモニター座標を得ることができません。
どうすればモニター座標(0,0)を原点とした
クライアント領域の座標を得ることができますでしょうか?