その他画面部品を操作する
操作対象画面(ボタンやリンクの例)を起動
'サンプル3.6_その他画面部品を操作する(Select/Radio/Check)
Public Sub moreElements()
Dim ie As InternetExplorer
Dim htdoc As HTMLDocument
Dim RadioElements As Object
Dim RadioElement As HTMLInputElement
'操作対象Web画面を取得
Set ie = getIE("ボタンやリンクの例")
'ドキュメントを取り出す(参照設定:Microsoft HTML Object Library)
Set htdoc = ie.document
'セレクトボックスを名古屋行きにする
htdoc.forms("form_sample").elements("select_sample").Value = "1"
'ラジオボタンを空路にする(同じName属性で複数個のValueがあるため、取り出して走査する)
Set RadioElements = htdoc.forms("form_sample").elements("radio_sample")
For Each RadioElement In RadioElements
If RadioElement.Value = "B" Then
RadioElement.Checked = True
'RadioElement.Click でもOK。クリックイベントを起こしたい場合。
Exit For
End If
Next
'チェックボックスの禁煙席をはずし、窓際席にする
htdoc.forms("form_sample").elements("check_sample1").Checked = False
htdoc.forms("form_sample").elements("check_sample2").Checked = True
End Sub
'ドキュメントタイトル/URLを指定してIEを取得
Public Function getIE(arg_title As String, Optional arg_url As String) As Object
Dim ie As Object 'IEを格納する変数(オブジェクト型)
Dim sh As Object '起動中のShellWindow一式を格納する変数
Dim win As Object 'ShellWindowを格納する変数
Dim document_title As String 'ドキュメントタイトルの一時格納変数
Set sh = CreateObject("Shell.Application") 'ShellWindowをwinsに格納
'ShellWindowから1つづつ取得して処理
For Each win In sh.windows
'ドキュメントタイトル取得失敗を無視(処理継続)
On Error Resume Next
document_title = ""
document_title = win.document.Title
On Error GoTo 0
'タイトルバーに引数が含まれるかチェック
If InStr(document_title, arg_title) > 0 Then
Set ie = win '変数ieに取得したwinを格納
Exit For 'ループを抜ける
End If
Next
Set getIE = ie '値の返却
End Function
要素に対する処理方法は、要素の種類により異なる。ドロップダウンリストの場合は、Value属性、つまり表示された文字列に紐づくシステム内のコード値ね。OPTIONタグのValue属性に相当するわ。
htdoc.forms("form_sample").elements("select_sample").Value = "1"
ラジオボタンの場合は、特定Name属性をもつラジオボタン要素を取得して、そのうち送信したいValue値を持つラジオボタンを探して選択する。
For Each RadioElement In RadioElements
If RadioElement.Value = "B" Then
RadioElement.Checked = True
最後にチェックボックスの場合。Checked属性、つまりチェックの有無を指定する。
htdoc.forms("form_sample").elements("check_sample1").Checked = False
いずれの場合も直接値や状態の編集をしているけれど、JavaScriptなどを考慮して、ClickメソッドやfireEventメソッドで明示的にイベントを発生させることが必要な場合もあるわ。