フォーム選択「formSelect」の解説
前回の「フォーム入力」で「入力」のサーブルーチン化をしました。
今回は、セレクトボックスの選択についてサブルーチン化していきます。
フォーム選択のサブルーチン
Sub formSelect(objIE As InternetExplorer, _
nameValue As String, _
tagValue As String)
'セレクトボックスの選択
For Each objTag In objIE.document.getElementsByTagName("select")
If objTag.Name = nameValue Then
For Each objOption In objTag.getElementsByTagName("option")
If InStr(objOption.outerHTML, tagValue) > 0 Then
objOption.Selected = True
GoTo label01
End If
Next
End If
Next
label01:
End Sub
フォーム入力マクロ
Sub sample()
Dim objIE As InternetExplorer
'テスト用フォームページを表示
Call ieView(objIE, "http://www.vba-ie.net/code/test.html")
'出身地のセレクトボックスを選択
call formSelect(objIE, "pref", "福岡")
End Sub
テスト用フォームページのソース
出身地:
<select name="pref">
<option value="東京">東京</option>
<option value="大阪">大阪</option>
<option value="福岡">福岡</option>
</select>
(省略)
</form>
実行結果
こちらの処理で「出身地」を自動選択します。
引数について以下の3つを設定しています。
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
---|---|---|---|---|---|
objIE | InternetExplorer | IEオブジェクト | objIE,objIE2 | × | |
nameValue | String | name属性の名前文字列 | "pref" | × | |
tagValue | String | 選択するoptionタグ内の一意のキーワード文字列 | "福岡" | × |
こちらは、formTextサブルーチンと同じですね。
「objIE」はオブジェクトを入力します。
「nameValue」はname属性の値を入力します。
「tagValue」には、選択するoptionタグ内の一意のキーワード文字列を入力します。
For Each objTag In objIE.document.getElementsByTagName("select")
(省略)
Next
まずは、select要素を取得します。ここから1つずつループでデータをチェックしていく処理です。
If objTag.Name = nameValue Then
(省略)
End If
こちらもformTextサブルーチンと同じ処理です。
objTag.Nameはname属性の値になりますので、同じname属性の値かどうかをチェックしています。
もし同じ値の場合は、更に処理を進めていく形です。
For Each objOption In objTag.getElementsByTagName("option")
(省略)
Next
ここで、またループ処理がでてきましたが、こちらはselect要素の中にoption要素で複数項目が存在します。
ここでは、全てのoption要素データを全て取得します。更にここから1つずつループでデータをチェックしていきます。
If InStr(objOption.outerHTML, tagValue) > 0 Then
(省略)
End If
option要素内にキーワード文字列が含まれている場合に処理をします。
こちらの処理は以下のような方法でも処理ができます。
If objOption.Value = tagValue Then
(省略)
End If
こちらはoptionのvalue値と指定した値が一致した場合に処理を行います。
今回の場合は、こちらの処理でも全く問題ありませんが、以下の場合はどうでしょう。
出身地:
<select name="pref">
<option value="1">東京</option>
<option value="2">大阪</option>
<option value="3">福岡</option>
</select>
(省略)
</form>
こちらで後者の処理をさせる場合にtagValueには「1」「2」「3」を指定する必要があります。
仮に何かしらの管理サイトをエクセルVBAのIE操作で作業をする場合、「1」「2」「3」が何を示すのかを覚えておかなければいけません。
このようにvalue値と表示値が異なる場合には前者の処理が向いています。
しかし、前者の処理も万能というわけではありません。
もし一意の文字列がなかった場合は、一番最初に表示されるoptionを選択してしまいます。
基本前者で対応ができますが、そうでない場合は臨機応変に対応してください。
objOption.Selected = True
選択する値を見つけたら、「Selectedプロパティ」で選択します。
GoTo label01
(省略)
label01:
ここまで完了した場合は「Exitステートメント」でループから脱出していましたが、今回は2回ループ処理を行っているため、1つのループから脱出してももう1つのループからは脱出できません。
ですので、ここでは、「GoToステートメント」で脱出しています
次回は「フォームクリック」について解説していきます。
次の記事: VBAでIEのformクリックサブルーチン化 >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。