VBAで起動済みのIE(InternetExplorer)を制御する「ieFind」

VBAのIE(InternetExplorer)制御に便利なサブルーチンを紹介しています。

「ieFindサブルーチン」の詳しい解説については、以下より確認してください。

エラーや誤ってIE(InternetExplorer)を削除した場合など制御できていないIEを見つけて制御する方法について解説しています。本来であれば、エラーがでないようなプログラムにすることが大前提なのですが、対象サイトのHTML構文に間違いや、規則性に沿って処理していたもののイレギュラーなページでエラーが起こることはよくありますので、こちらを利用するととても便利です。

サブルーチンとは

サブルーチンとは、プログラム処理の中で繰り返し利用されるルーチン作業をモジュール化(部品化)してまとめたものになります。また、呼び出す側をメインルーチンと呼ぶのに対して「サブルーチン」と呼ばれます。

メリット

繰り返し利用されるルーチン作業をモジュール化(部品化)することで、同じ処理のプログラムを何度も書く手間が省け、プログラムも全体的に見やすくなります。これによりプログラムソースの可読性や保守性を高く保つことができます。

関連性の高いサブルーチン

Function ieFind(urlName As String) As InternetExplorer
    
    Dim objShell As Object, objWin As Object

  'Shellオブジェクトを作成する
    Set objShell = CreateObject("Shell.Application")
      
    For Each objWin In objShell.Windows

        If objWin.name = "Internet Explorer" And _
           objWin.LocationURL = urlName Then

            'InternetExplorerオブジェクトを代入
            Set ieFind = objWin

            Exit For

        End If

    Next

    Set objShell = Nothing

End Function

こちらの構文と引数の内容は以下になります。尚、引数はすべて参照渡しで渡されます。

ieFind("制御対象のサイトURLの文字列")
構文ieFind(urlName)
引数名データ型内容値の事例初期値省略
urlNameString制御したい対象のサイトURLの文字列を指定します。"http://www.vba-ie.net/"×

引数urlNameは必須項目で、制御したい対象のサイトURLの文字列を設定します。


    Dim objShell As Object, objWin As Object

まずは、Dimステートメントを利用してオブジェクト変数objShell,objWinオブジェクト型(Object)を変数宣言しています。

    'Shellオブジェクトを作成する
    Set objShell = CreateObject("Shell.Application")

次にSetステートメントCreateObject関数を利用してShellオブジェクトを作成します。

    For Each objWin In objShell.Windows

        If objWin.name = "Internet Explorer" And _
           objWin.LocationURL = urlName Then

            'InternetExplorerオブジェクトを代入
            Set ieFind = objWin

            Exit For

        End If

    Next

こちらでは、For Each~Nextステートメントを利用して現在開いているウィンドウの数だけループ処理を行っています。設定するコレクションは、ShellオブジェクトのWindowsプロパティで取得した現在開いているウィンドウ(Windowsコレクション)になります。

さらにIf~Then~Elseステートメントを利用して「開いているウィンドウの名前がInternet Explorer」かつ「サイトのURLが引数urlNameと一致」したオブジェクトを戻り値ieFindにセットします。これにより、InternetExplorerオブジェクトを制御する環境が整いました。

サイトのURLを取得する場合は、InternetExplorerオブジェクトLocationURLプロパティを利用して取得します。InternetExplorerオブジェクトをセットしたらExit Forステートメントを利用してループを抜けます。

    Set objShell = Nothing

End Function

ループ処理を抜けたらSetステートメントを利用して、Nothingを指定することでShellオブジェクトを解除します。プロシージャレベルで宣言した変数については、そのプロシージャの実行が終了した時点で自動的に開放されるで基本不要なのですが、こちらでは記載することとしています。

最後はEndステートメントを利用してieFindサブルーチン(ユーザー定義関数)を終了させます。