フォーム選択「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

テスト用フォームページのソース

<form method="post" name ="form1" action="?">
出身地:
<select name="pref">
<option value="東京">東京</option>
<option value="大阪">大阪</option>
<option value="福岡">福岡</option>
</select>
(省略)
</form>

実行結果

formセレクト自動選択

こちらの処理で「出身地」を自動選択します。
引数について以下の3つを設定しています。

引数名データ型内容値の事例初期値省略
objIEInternetExplorerIEオブジェクトobjIE,objIE2×
nameValueStringname属性の名前文字列"pref"×
tagValueString選択するoptionタグ内の一意のキーワード文字列"福岡"×
formSelect("IEオブジェクト","name属性の名前文字列","選択する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値と指定した値が一致した場合に処理を行います。
今回の場合は、こちらの処理でも全く問題ありませんが、以下の場合はどうでしょう。

<form method="post" name ="form1" action="?">
出身地:
<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クリックサブルーチン化 >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。