フレーム内フォーム入力「frameFormText」の解説
ここまで、フレーム内の処理方法について解説してきましたが、今回はフレーム処理のサブルーチン化について解説していきます。
こちらはフォームの「入力」「選択」「クリック」と「値取得」の4つになります。
まずは、フォームの「入力」から見ていきましょう。
フレーム内フォーム入力のサブルーチン
Sub frameFormText(objIE As InternetExplorer, _
nameValue As String, _
tagValue As String)
'フレームのオブジェクトを取得する
Set objFrame = objIE.document.frames
For i = 0 To objFrame.Length - 1
'フレームドキュメントのオブジェクトを取得する
Set objFrameDoc = objFrame(i).document
'フレーム内のテキストボックス・パスワードボックスに値を入力
For Each objTag In objFrameDoc.getElementsByTagName("input")
If objTag.name = nameValue Then
objTag.Value = tagValue
GoTo label01
End If
Next
'フレームテキストエリアに値を入力
For Each objTag In objFrameDoc.getElementsByTagName("textarea")
If objTag.name = nameValue Then
objTag.Value = tagValue
GoTo label01
End If
Next
Next
label01:
End Sub
フレーム内フォーム入力のマクロ
Sub sample()
Dim objIE As InternetExplorer
'本サイトを起動
Call ieView(objIE, "http://www.vba-ie.net/code/test2.html")
'frame内の名前のテキストボックスに値を入力
call frameFormText(objIE, "name", "田中太郎")
'frame内のパスワードボックスに値を入力
call frameFormText(objIE, "pass", "1234")
'frame内のテキストエリアに値を入力
call frameFormText(objIE, "textbox", "さわやかです。")
End Sub
実行結果
こちらの処理でフレーム内の「名前」「パスワード」「今の気持ち」に自動入力します。
引数は以下の3つを設定しています。
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
---|---|---|---|---|---|
objIE | InternetExplorer | IEオブジェクト | objIE,objIE2 | × | |
nameValue | String | name属性の名前文字列 | "name","pass" | × | |
tagValue | String | 目的エレメントに入力する文字列 | "田中太郎" | × |
引数については、form操作のサブルーチンとまったく同じです。
フォーム用のサブルーチンを利用することで、簡単に処理を行うことができます。
念のため引数について説明すると、全て必須項目となります。
「objIE」はオブジェクトを入力します。
「nameValue」はname属性を値を入力します。
「tagValue」には、テキストボックス・パスワードボックス・テキストエリアに入力する値を入力します。
Set objFrame = objIE.document.frames
こちらでフレーム情報を取得します。
For i = 0 To objFrame.Length - 1
(省略)
Next
Lengthプロパティはフレームの数を取得します。
今回のフレーム数は2ですが、フレームは0からスタートするので、-1で処理数を合わせています。
Set objFrameDoc = objFrame(i).document
こちらでループ毎にフレームのドキュメントを取得していきます。
For Each objTag In objFrameDoc.getElementsByTagName("input")
If objTag.name = name Then
objTag.Value = tagValue
GoTo label01
Exit For
End If
Next
For Each objTag In objFrameDoc.getElementsByTagName("textarea")
If objTag.name = name Then
objTag.Value = tagValue
GoTo label01
End If
Next
こちらの処理も「formTextサブルーチン」と同じ処理になります。
フレームドキュメント内でinputタグ・textareaタグを取得して、name名が同じ場合に値を入力する処理になります。
1つだけ違う点は「Exitステートメント」でループ脱出ではなく、「GoToステートメント」で脱出している点です。
こちらも以前説明しましたが、複数ループ処理の場合は、「Exit For」で完全に脱出できないので「Gotoステートメント」を利用しています。
次回は「フレーム内フォーム選択」について解説していきます。
次の記事: VBAでIEのフレーム内フォーム選択のサブルーチン化 >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。