ray88’s diary

お仕事で困ったとき用の自分用の覚書

IE操作 テキストボックスの操作

■テキストボックスは多くの場合、サーバ送信時のキー項目としてname属性が付与されている。
また、name属性を付与した場合はid属性を付与することがHTMLの使用そして推奨されている。
以下のコードはid属性をキーにして特定しているが、id属性が付与Sれていない場合、
「getElementsByName」メソッドを利用することでname属性をキーとして格納することもできる。
このさい、id属性は一意だが、name属性は一意でないため、「getElements」と複数表現になっている。
タグに対して付与されているname属性がたまたま一意であったとしても、1番目の要素であることを
示すためにインデックス番号「0」を指定して取得する必要がある。

■テキストボックスへの参照を格納する変数のデータ型は「HTMLInputElement」型とする。
このデータ型はタグの属性や操作を備えている。

■以下のVBAコードはページ下部のHTMLコードで記述されたWEBページに対しての操作。参照設定で「InternetExplorer」と「htmlObjectLibrary」チェックを入れている。

Sub useTextbox()
    Dim ie As InternetExplorer
    '値を取得するテキストボックス部品を格納する変数
    Dim txtInput As HTMLInputElement
    Dim txtOutput As HTMLInputElement
    Dim htDocs As String    
    'IEを開いて対象画面へ移動
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True
    ie.navigate "https://book.impress.co.jp/appended/3384/4-2.html"
    Do While ie.Busy Or ie.readyState < 4
        Debug.Print ie.Busy & ":" & ie.readyState
        DoEvents
    Loop
    'テキストボックスを変数「txtInput」としてVBAから扱えるようにする
    Set txtInput = ie.document.getElementById("Text1")
    'テキストボックスから値を取得し、メッセージボックスで表示する
    MsgBox txtInput.Value
    'テキストボックスを変数「txtOutput」としてVBAから扱えるようにする
    Set txtOutput = ie.document.getElementById("Text2")
    'テキストボックスの値を書き換える
    txtOutput.Value = "VBAからの書込み"
End Sub

■上記のVBAコードは以下のHTMLコードで書かれたWEBページに対しての処理

<html>
<head>
<title>テキストボックス</title>
</head>

<body>
取得用:<input id="Text1" type="text" value="テスト"><br>
出力用:<input id="Text2" type="text" value="">
</body>

</html>