IEウィンドウを最前面に表示設定

<< エクセルVBAでIEウィンドウの表示倍率を設定する :前の記事

前回は、IEウィンドウの表示倍率(拡大・縮小)を設定する方法について解説しました。今回はIE(InternetExplorer)ウィンドウを最前面に表示させる方法について説明します。こちらの処理はBASIC認証を自動化させたい場合や、確実にSendKeysステートメントを利用できるようIEウィンドウを最前面に設定しておくと非常に便利です。

目次

IE(InternetExplorer)ウィンドウを最前面に表示設定する処理の流れ

以下が今回の処理の流れになります。

  • ①Windows APIの宣言
  • ②変数宣言
  • ③ieViewサブルーチンを利用して指定したURLをIEで起動
  • ③IEウィンドウの表示状態(最小化)をチェック
  • ④最小化の場合は、表示サイズを元の大きさに戻す
  • ⑤IEウィンドウを最前面に表示

利用するサブルーチン・Windows API関数・プロパティについて

今回利用するサブルーチン・Windows API関数・プロパティは以下になります。

  • ieViewサブルーチン
  • ieCheckサブルーチン
  • Windows API
  • Windows APIのIsIconic関数
  • Windows APIのShowWindowAsync関数
  • Windows APIのSetForegroundWindow関数
  • Hwndプロパティ

ieViewサブルーチンとは

ieViewサブルーチン指定したURLをInternetExplorerで起動させ、Webページが完全に読み込まれるまで待機処理をするマクロです。

ieView("IEオブジェクト","表示させたいURLの文字列","IE表示・非表示の値[省略可]","Y位置の値[省略可]","X位置の値[省略可]","幅の値[省略可]","高さの値[省略可]")

ieCheckサブルーチンとは

ieCheckサブルーチン指定したInternetExplorerオブジェクトのWebページが完全に読み込まれるまで待機処理をするマクロです。

ieCheck("IEオブジェクト")

Windows APIとは

API(Application Programming Interface)は、アプリケーションからOSやプログラム言語を操作するためのライブラリです。このAPIを利用することでファイル制御やウインドウ制御などを行うことが出来ます。また、Windows APIMicrosoft WindowsのAPIのことで、Windowsのバージョン毎に拡張されており16ビットは「Win16 API」32ビットは「Win32 API」と呼ばれます。

Windows APIのIsIconic関数とは

Windows APIのIsIconic関数指定されたウィンドウが最小化(アイコン化)されているかチェックするAPI関数です。

IsIconic("ウィンドウのハンドル")

Windows APIのShowWindowAsync関数とは

Windows APIのShowWindowAsync関数指定されたウインドウの表示状態を設定するAPI関数です。

ShowWindowAsync("ウィンドウのハンドル", "ウィンドウの表示方法")

Windows APIのSetForegroundWindow関数とは

Windows APIのSetForegroundWindow関数指定されたウィンドウをフォアグラウンドウィンドウ(デスクトップ上に表示されているウィンドウの中で最前面に表示されかつユーザの入力を受け付けられる状態)にするAPI関数です。

SetForegroundWindow("ウィンドウのハンドル")

Hwndプロパティとは

InternetExplorerオブジェクトのHwndプロパティIEウィンドウのハンドルを示す長整数型(Long)の値を返します。

SetForegroundWindow("ウィンドウのハンドル")

IE(InternetExplorer)ウィンドウを最前面に表示させるサンプルコード

今回の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)ウィンドウが最前面に表示されます。

APIのSetForegroundWindowによる最前面表示

解説

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ステートメントを利用してオブジェクト変数objIEInternetExplorer型変数宣言しています。

これにより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_HIDE0ウィンドウを非表示にして、他のウィンドウをアクティブにします。
SW_SHOWNORMAL1ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、ウィンドウの位置とサイズを元に戻します。アプリケーションは、最初にウィンドウを表示させるときにこのフラグを指定するべきです。
SW_SHOWMINIMIZED2ウィンドウをアクティブにして、最小化されたウィンドウとして表示します。
SW_SHOWMAXIMIZED, SW_MAXIMIZE3ウィンドウをアクティブにして、最大化されたウィンドウとして表示します。
SW_SHOWNOACTIVATE4ウィンドウをアクティブにはせずに表示します。
SW_SHOW5ウィンドウをアクティブにして、現在の位置とサイズで表示します。
SW_MINIMIZE6指定されたウィンドウを最小化して、次の Z オーダーにあるトップレベルウィンドウをアクティブにします。
SW_SHOWMINNOACTIVE7ウィンドウを最小化されたウィンドウとして表示します。ウィンドウはアクティブ化されません。
SW_SHOWNA8ウィンドウを現在の位置とサイズで表示します。ウィンドウはアクティブ化されません。
SW_RESTORE9ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、ウィンドウの位置とサイズを元に戻します。アプリケーションは、最小化されたウィンドウの位置とサイズを元に戻すときにこのフラグを指定するべきです。
SW_SHOWDEFAULT10アプリケーションを起動したプログラムが?CreateProcess?関数にパラメータとして渡した?STARTUPINFO?構造体で指定されている SW_ 値に基づいて表示状態が設定されます。
SW_FORCEMINIMIZE11Windows 2000/XP:?ウィンドウを所有しているスレッドがハングしている状態であっても、ウィンドウを最小化します。他のスレッドからウィンドウを最小化させる場合にのみ、このフラグを使用するべきです。

こちらの処理は、次のIEウィンドウを最前面に表示させる準備になります。最小化した状態では最前面に表示させることができませんので、IEウィンドウの最小化の状態を回避するための処理になります。

    'IEを最前面に表示
    SetForegroundWindow (objIE.hWnd)

End Sub

指定したウィンドウを最前面に表示させるSetForegroundWindow関数IEウィンドウのハンドルを設定しています。これによりIEウィンドウが最前面に表示されます。

最後はEndステートメントを利用してsampleプロシージャを終了させます。

IE(InternetExplorer)ウィンドウを最前面に表示させるサブルーチン「ieForeground」の解説

こちらは、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("IEオブジェクト")
構文ieForeground(objIE)
引数名データ型内容値の事例初期値省略
objIEInternetExplorerInternetExplorerオブジェクトを指定します。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ウィンドウを最前面に表示できるようになります。それでは、こちらを利用したサンプルコードを見ていきましょう。

「ieForeground」を利用してIE(InternetExplorer)ウィンドウを最前面に表示するサンプルコード

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ウィンドウの各種バーを表示・非表示にする >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

  • このエントリーをはてなブックマークに追加
VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。