VBAのIE(InternetExplorer)制御のIEウィンドウを最前面に表示設定について解説しています。
<< エクセルVBAでIEウィンドウの表示倍率を設定する :前の記事
前回は、IEウィンドウの表示倍率(拡大・縮小)を設定する方法について解説しました。今回はIE(InternetExplorer)ウィンドウを最前面に表示させる方法について説明します。こちらの処理はBASIC認証を自動化させたい場合や、確実にSendKeysステートメントを利用できるようIEウィンドウを最前面に設定しておくと非常に便利です。
以下が今回の処理の流れになります。
今回利用するサブルーチン・Windows API関数・プロパティは以下になります。
ieViewサブルーチンは指定したURLをInternetExplorerで起動させ、Webページが完全に読み込まれるまで待機処理をするマクロです。
ieCheckサブルーチンは指定したInternetExplorerオブジェクトのWebページが完全に読み込まれるまで待機処理をするマクロです。
API(Application Programming Interface)は、アプリケーションからOSやプログラム言語を操作するためのライブラリです。このAPIを利用することでファイル制御やウインドウ制御などを行うことが出来ます。また、Windows APIはMicrosoft WindowsのAPIのことで、Windowsのバージョン毎に拡張されており16ビットは「Win16 API」32ビットは「Win32 API」と呼ばれます。
Windows APIのIsIconic関数は指定されたウィンドウが最小化(アイコン化)されているかチェックするAPI関数です。
IsIconic("ウィンドウのハンドル")
Windows APIのShowWindowAsync関数は指定されたウインドウの表示状態を設定するAPI関数です。
ShowWindowAsync("ウィンドウのハンドル", "ウィンドウの表示方法")
Windows APIのSetForegroundWindow関数は指定されたウィンドウをフォアグラウンドウィンドウ(デスクトップ上に表示されているウィンドウの中で最前面に表示されかつユーザの入力を受け付けられる状態)にするAPI関数です。
SetForegroundWindow("ウィンドウのハンドル")
InternetExplorerオブジェクトのHwndプロパティはIEウィンドウのハンドルを示す長整数型(Long)の値を返します。
SetForegroundWindow("ウィンドウのハンドル")
今回のVBAコードはIE(InternetExplorer)ウィンドウを最前面に表示させるマクロになります。
Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function ShowWindowAsync Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nCmdShow As Long _
) As Long
Const SW_RESTORE As Long = 9
Sub sample()
Dim objIE As InternetExplorer
'本サイトをIE(InternetExplorer)で起動
Call ieView(objIE, "http://www.vba-ie.net")
'ウィンドウが最小化されているかのチェック
If IsIconic(objIE.hWnd) Then
ShowWindowAsync objIE.hWnd, SW_RESTORE
End If
'IEを最前面に表示
SetForegroundWindow (objIE.hWnd)
End Sub
※ドラッグ(スワイプ)すると全体を確認できます。
IE(InternetExplorer)ウィンドウが最前面に表示されます。
Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long
※ドラッグ(スワイプ)すると全体を確認できます。
まず、最前面表示に必要なWindows APIを使用できるようにAPIの宣言をします。宣言する場合は、宣言セクション内に記述します。こちらはWindows APIのIsIconic関数の宣言です。IsIconic関数は、ウィンドウが最小化されているかをチェックするために利用されます。
Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
※ドラッグ(スワイプ)すると全体を確認できます。
こちらはWindows APIのSetForegroundWindow関数の宣言です。SetForegroundWindow関数は指定されたウィンドウを最前面に表示するAPI関数です。
Declare Function ShowWindowAsync Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nCmdShow As Long _
) As Long
Const SW_RESTORE As Long = 9
※ドラッグ(スワイプ)すると全体を確認できます。
こちらはAWindows APIのShowWindowAsync関数の宣言です。指定されたウインドウの表示状態を設定します。定数を宣言するConstステートメントを利用して定数SW_RESTOREに「9」を設定しています。こちらの値はShowWindowAsync関数の引数に利用され、定数SW_RESTOREは、ウィンドウを元のサイズに戻す値になります。
Sub sample()
Dim objIE As InternetExplorer
※ドラッグ(スワイプ)すると全体を確認できます。
こちらはSubステートメントに引数の設定がないsampleプロシージャになります。まずは、変数宣言でメモリ領域を割り当てるDimステートメントを利用してオブジェクト変数objIEにInternetExplorer型を変数宣言しています。
これによりInternetExplorerオブジェクトを作成した際にプロパティやメソッドを利用できるようになりました。
'本サイトをIE(InternetExplorer)で起動
Call ieView(objIE, "http://www.vba-ie.net/")
※ドラッグ(スワイプ)すると全体を確認できます。
次に他のプロシージャを呼び出すCallステートメントを利用してieViewサブルーチンを呼び出しています。それぞれの第一引数にはオブジェクト変数の「objIE」を第二引数には表示させるURLの「http://www.vba-ie.net/」を設定しています。これにより本サイトがIE(InternetExplorer)で表示されます。
'ウィンドウが最小化されているかのチェック
If IsIconic(objIE.hWnd) Then
ShowWindowAsync objIE.hWnd, SW_RESTORE
End If
※ドラッグ(スワイプ)すると全体を確認できます。
こちらは、条件分岐のIf~Then~Elseステートメントを利用してIEウィンドウが最小化されているかのチェックを行っています。条件にはIsIconic関数を利用しており引数に「objIE.hWnd」を設定しています。
InternetExplorerオブジェクトのHwndプロパティはIEウィンドウのハンドルを返します。ハンドルとは、デスクトップ上に開いているそれぞれのウィンドウにOSが付けた管理番号になります。こちらを利用することでどのウィンドウかを判断することができます。
また、IsIconic関数の戻り値はウィンドウが最小化されている場合は「0以外の値」を最小化されていない場合は「0」を返します。数値型をブール型(Boolean)に変換すると「真(True)」は0以外の値になります。
よって、IEウィンドウが最小化されている場合が「真(True)」になりますので、指定されたウインドウの表示状態を設定するShowWindowAsync関数が実行されます。こちらの引数には、IEウィンドウのハンドルと定数SW_RESTOREが設定されています。
定数SW_RESTOREには「9」が格納されていましたが、こちらはウィンドウが最小化または最大化されている場合にウィンドウの位置とサイズを元に戻す処理になります。以下は設定値になりますので、参考にしてください。
定数 | 値 | 内容 |
---|---|---|
SW_HIDE | 0 | ウィンドウを非表示にして、他のウィンドウをアクティブにします。 |
SW_SHOWNORMAL | 1 | ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、ウィンドウの位置とサイズを元に戻します。アプリケーションは、最初にウィンドウを表示させるときにこのフラグを指定するべきです。 |
SW_SHOWMINIMIZED | 2 | ウィンドウをアクティブにして、最小化されたウィンドウとして表示します。 |
SW_SHOWMAXIMIZED, SW_MAXIMIZE | 3 | ウィンドウをアクティブにして、最大化されたウィンドウとして表示します。 |
SW_SHOWNOACTIVATE | 4 | ウィンドウをアクティブにはせずに表示します。 |
SW_SHOW | 5 | ウィンドウをアクティブにして、現在の位置とサイズで表示します。 |
SW_MINIMIZE | 6 | 指定されたウィンドウを最小化して、次の Z オーダーにあるトップレベルウィンドウをアクティブにします。 |
SW_SHOWMINNOACTIVE | 7 | ウィンドウを最小化されたウィンドウとして表示します。ウィンドウはアクティブ化されません。 |
SW_SHOWNA | 8 | ウィンドウを現在の位置とサイズで表示します。ウィンドウはアクティブ化されません。 |
SW_RESTORE | 9 | ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、ウィンドウの位置とサイズを元に戻します。アプリケーションは、最小化されたウィンドウの位置とサイズを元に戻すときにこのフラグを指定するべきです。 |
SW_SHOWDEFAULT | 10 | アプリケーションを起動したプログラムが?CreateProcess?関数にパラメータとして渡した?STARTUPINFO?構造体で指定されている SW_ 値に基づいて表示状態が設定されます。 |
SW_FORCEMINIMIZE | 11 | Windows 2000/XP:?ウィンドウを所有しているスレッドがハングしている状態であっても、ウィンドウを最小化します。他のスレッドからウィンドウを最小化させる場合にのみ、このフラグを使用するべきです。 |
こちらの処理は、次のIEウィンドウを最前面に表示させる準備になります。最小化した状態では最前面に表示させることができませんので、IEウィンドウの最小化の状態を回避するための処理になります。
'IEを最前面に表示
SetForegroundWindow (objIE.hWnd)
End Sub
※ドラッグ(スワイプ)すると全体を確認できます。
指定したウィンドウを最前面に表示させるSetForegroundWindow関数にIEウィンドウのハンドルを設定しています。これによりIEウィンドウが最前面に表示されます。
最後はEndステートメントを利用してsampleプロシージャを終了させます。
こちらは、IE(InternetExplorer)ウィンドウを最前面に表示させるサブルーチンになります。
Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function ShowWindowAsync Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nCmdShow As Long _
) As Long
Const SW_RESTORE As Long = 9
Sub ieForeground(objIE As InternetExplorer)
'ウィンドウが最小化されているかのチェック
If IsIconic(objIE.hWnd) Then
ShowWindowAsync objIE.hWnd, SW_RESTORE
End If
'IEを最前面に表示
SetForegroundWindow (objIE.hWnd)
End Sub
※ドラッグ(スワイプ)すると全体を確認できます。
それでは、VBAコードを1つずつ説明していきます。
Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare Function ShowWindowAsync Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal nCmdShow As Long _
) As Long
Const SW_RESTORE As Long = 9
※ドラッグ(スワイプ)すると全体を確認できます。
まず、最前面表示に必要なWindows APIを使用できるようにAPIの宣言をします。宣言するAPIはIsIconic関数・SetForegroundWindow関数・ShowWindowAsync関数の3つです。また、定数SW_RESTOREに「9」を設定しています。こちらの値はShowWindowAsync関数の引数に利用されます。
Sub ieForeground(objIE As InternetExplorer)
※ドラッグ(スワイプ)すると全体を確認できます。
こちらはSubステートメントに引数を1つ設定しているieForegroundサブルーチンになります。こちらの構文と引数の内容は以下になります。尚、引数はすべて参照渡しで渡されます。
構文 | ieForeground(objIE) | ||||
---|---|---|---|---|---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
objIE | InternetExplorer | InternetExplorerオブジェクトを指定します。 | objIE,objIE2 | × |
こちらは、必須項目となります。「objIE」にはIEオブジェクトを設定します。複数のIEオブジェクトを操作する場合には「objIE」「objIE2」といった操作するIEオブジェクトを指定してください。オブジェクト作成により、プロパティやメソッドの利用が可能となりIE(InternetExplorer)を制御することがでます。
'ウィンドウが最小化されているかのチェック
If IsIconic(objIE.hWnd) Then
ShowWindowAsync objIE.hWnd, SW_RESTORE
End If
※ドラッグ(スワイプ)すると全体を確認できます。
こちらは、IEウィンドウが最小化されているかのチェックを行っています。IEウィンドウが最小化されている場合が「真(True)」になりますので、指定されたウインドウの表示状態を設定するShowWindowAsync関数が実行されます。
'IEを最前面に表示
SetForegroundWindow (objIE.hWnd)
End Sub
※ドラッグ(スワイプ)すると全体を確認できます。
指定したウィンドウを最前面に表示させるSetForegroundWindow関数にIEウィンドウのハンドルを設定しています。
こちらを利用することで、IEウィンドウを最前面に表示できるようになります。それでは、こちらを利用したサンプルコードを見ていきましょう。
Sub sample()
Dim objIE As InternetExplorer
'本サイトをIEで表示
Call ieView(objIE, "http://www.vba-ie.net")
'IEを最前面に表示
Call ieForeground(objIE)
End Sub
※ドラッグ(スワイプ)すると全体を確認できます。
まず、変数objIEに「InternetExplorer型」を宣言しています。次にCallステートメントを利用してieViewサブルーチンを呼び出し本サイトをIE(InternetExplorer)で表示させます。そして、「ieForeground」の引数にInternetExplorerオブジェクトを格納しIEウィンドウを最前面に表示します。
今回は、IE(InternetExplorer)ウィンドウを最前面に表示させる方法について解説しました。こちらは、BASIC認証を自動化させたい場合や、確実にSendKeysステートメントを利用したい場合などにとても有効です。次回はエクセルBAでIEウィンドウの各種バーを表示・非表示にする方法について解説します。
次の記事: エクセルVBAでIEウィンドウの各種バーを表示・非表示にする >>
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
VBAのIE制御についてのQ&A掲示板↑VBAのIE操作で分からない事があればこちらの掲示板よりご質問ください。
ExcelのVBA初心者入門↑こちらはVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります。
こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。
こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。
こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。