VBA IE操作

Tag:

ここではVBAを利用して、
・新規にIEを起動させる方法
・Webページ上のデータを取得する方法
・Webページ上のフォームにデータを入力する方法
を紹介します。

VBAを利用したIE操作の方法を覚えると、
『ボタンをクリックするだけで目的のWebページにアクセスして自動ログイン』
などの処理を作れるようになります。

なお、Webページの情報を扱うためHTMLやDOMの知識が多少必要です。

アクセスするWebページ

サンプルコードで利用するためのWebページを用意しました。
http://www.dn-web64.com/sample/vba_ie.html

htmlのソースを示します。

<body>
    <p class="bbbb">あいうえお</p>
    <p class="bbbb">かきくけこ</p>
    <p class="bbbb">さしすせそ</p>
    
    <div id="aaaa">
        <p>たちつてと</p>
    </div>
    
    フォーム1
    <form action="#">
        <input name="username" value="佐藤">
        <input type="submit" value="送信">
    </form>
    
    <table border="1" style="margin:20px 0px;">
        <thead>
            <tr>
                <th>名前</th>
                <th>年齢</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>鈴木</td>
                <td>24</td>
            </tr>
            <tr>
                <td>山本</td>
                <td>30</td>
            </tr>
        </tbody>
    </table>
            
    フォーム2
    <form >
        <input name="username">
        <input id="pass" name="pass">
        <input type="submit" value="送信">
    </form>
</body>

IE操作 サンプルコード

では、VBAのコードを見てみましょう。
次に示すコードでは、
(1) 新規にIEを起動し、Webページ(http://www.dn-web64.com/sample/vba_ie.html)を表示
(2) Webページから情報を読み取りメッセージボックスに表示
(3) Webページのフォームに自動でデータを入力
といった処理を行います。

Sub IE操作()
    Dim IE As Object

    target = "http://www.dn-web64.com/sample/vba_ie.html"
    Set IE = CreateObject("InternetExplorer.Application")
    With IE
        '(1)表示
        'InternetExplorerを表示する
        .Visible = True
    
        '指定したURLのページを表示する
        .Navigate target
    
    
        '(2)処理待機
        '完全にページが表示されるまで待機する
        Do While .Busy = True Or .ReadyState <> 4
            DoEvents
        Loop
        
        '完全にドキュメントが読み込まれるまで待機する
        Do While .Document.ReadyState <> "complete"
            DoEvents
        Loop
        
        
        '(3)IE操作 パラメータ自動取得
        'id属性が "aaaa" のデータを抽出する
        MsgBox .Document.getElementById("aaaa").outerHTML
        MsgBox .Document.getElementById("aaaa").innerHTML
        MsgBox .Document.getElementById("aaaa").outerText
        MsgBox .Document.getElementById("aaaa").innerText
        
        'HTMLタグがp要素で1番目のデータを抽出する
        MsgBox .Document.getElementsByTagName("p")(0).outerHTML
    
        'class属性がbbbbで2番目のデータを抽出する
        MsgBox .Document.getElementsByClassName("bbbb")(1).outerHTML
    
        'name属性がusernameの1番目の要素オブジェクトのデータを抽出する
        MsgBox .Document.getElementsByName("username")(0).outerHTML
    
        'テーブルデータを抽出する
        Set Table = .Document.getElementsByTagName("table")(0)
        For i = 0 To Table.Rows.Length - 1
          MsgBox i & "行目:" & Table.Rows(i).outerHTML
        Next
    
    
        '(4)IE操作 パラメータ自動入力
        'nameにusernameと指定された2番目の箇所にデータを入力
        .Document.getElementsByName("username")(1).Value = "高橋"
        
        'id属性が "pass" である箇所にデータを入力
        .Document.getElementById("pass").Value = "abcdef"

        '2つめのフォームの送信が実行されます。
        .Document.forms(1).submit
    End With
End Sub

実行結果

IE操作の実行結果を1つずつ見てみましょう。

MsgBox .Document.getElementById("aaaa").outerHTML

vba_ie1

MsgBox .Document.getElementById("aaaa").innerHTML

vba_ie2

MsgBox .Document.getElementById("aaaa").outerText

vba_ie3_4

MsgBox .Document.getElementById("aaaa").innerText

vba_ie3_4

'HTMLタグがp要素で1番目のデータを抽出する
MsgBox .Document.getElementsByTagName("p")(0).outerHTML

vba_ie5

'class属性がbbbbで2番目のデータを抽出する
MsgBox .Document.getElementsByClassName("bbbb")(1).outerHTML

vba_ie6

'name属性がusernameの1番目の要素オブジェクトのデータを抽出する
MsgBox .Document.getElementsByName("username")(0).outerHTML

vba_ie7

'テーブルデータを抽出する
Set Table = .Document.getElementsByTagName("table")(0)
For i = 0 To Table.Rows.Length - 1
  MsgBox i & "行目:" & Table.Rows(i).outerHTML
Next

vba_ie8

vba_ie9

vba_ie10

'nameにusernameと指定された2番目の箇所にデータを入力
.Document.getElementsByName("username")(1).Value = "高橋"

vba_ie11

'id属性が "pass" である箇所にデータを入力
.Document.getElementById("pass").Value = "abcdef"

vba_ie12

スポンサーリンク