読者です 読者をやめる 読者になる 読者になる

kurukuru-papaのブログ

主に、ソフトウェア開発に関連したメモを書き溜めたいと思います。

InternetExplorerを操作する

VBAからInternetExplorerを操作する主要な方法をまとめてみます。

初期処理と終了処理です。初期処理ではIEを起動・表示します。後処理ではIEを閉じます。

Private Sub U_IEInit(ie As Object)
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True
End Sub

Private Sub U_IEEnd(ie As Object)
    ie.Quit
    Set ie = Nothing
End Sub

IE処理の完了を待つためのサブモジュールです。ページを切り替えたときやフォームをサブミットした後などは、このサブモジュールでページの読み込みが完了するのを待ちます。

Enum READYSTATE
    READYSTATE_UNINITIALIZED = 0
    READYSTATE_LOADING = 1
    READYSTATE_LOADED = 2
    READYSTATE_INTERACTIVE = 3
    READYSTATE_COMPLETE = 4
End Enum
Private Sub U_IEWait(ie)
    Do While ie.READYSTATE <> READYSTATE_COMPLETE
        DoEvents '一旦OSに制御を返す
        Sleep (100) '0.1秒停止
    Loop
    Do While ie.document.READYSTATE <> "complete"
        DoEvents '一旦OSに制御を返す
        Sleep (100) '0.1秒停止
    Loop
    Do While ie.Busy
        DoEvents '一旦OSに制御を返す
        Sleep (100) '0.1秒停止
    Loop
End Sub

ページを切り替えます。

    ie.Navigate (<表示したいページのURL>)
    Call U_IEWait(ie)

ボタンをクリックします。

    Dim item As Object
    For Each item In ie.document.getElementsByName(<ボタンタグの名前>)
        item.Click
        ' はじめの1件のみ処理します
        Exit For
    Next
    Call U_IEWait(ie)

指定タグのValue属性に値を設定します。

    Dim item As Object
    For Each item In ie.document.getElementsByName(<対象タグの名前>)
        item.value = <設定する値>
        ' はじめの1件のみ処理します
        Exit For
    Next

表示中のページのHTMLを取得します。ここではデバッグ出力しています。

    Debug.Print ie.document.DocumentElement.outerHTML

指定タグのHTMLを取得します。ここではデバッグ出力しています。

    Dim line As Variant
    Dim item As Object
    For Each item In ie.document.getElementsByName(<対象タグの名前>)
        Debug.Print item.innerHTML
        ' はじめの1件のみ処理します
        Exit For
    Next

指定タグのValue属性を取得します。ここではデバッグ出力しています。

    Dim line As Variant
    Dim item As Object
    For Each item In ie.document.getElementsByName(<対象タグの名前>)
        Debug.Print item.Value
        ' はじめの1件のみ処理します
        Exit For
    Next

ある種のタグを全て取得します。(次の例では"INPUT"をベタ書きしていますが、これを"INPUT"という値のString型変数で置き換えると上手く動きませんでした・・・。)

    For Each item In ie.document.all.tags("INPUT")
        Debug.Print "U_IESearchItem: " & item.name & "," & item.ID & "," & item.value
    Next

動作確認環境