フレーム内に値を自動入力
これまで「IEの基本操作」「エレメントの基本操作」「フォームの基本操作」について解説してきました。
ここまでくると大抵のことは処理できるぐらいの力が付いていると思います。
今回は、ここまででまだ対応ができないフレーム処理について解説していきます。
Frameタグは、1つのページに2つ以上のページを同時に表示させるタグのことですが、フレーム内のテキストボックスに入力したい場合は、フレーム内のデータを取得する必要があります。
まずは、既存の方法でどうなるか試してみましょう。
フレーム処理のマクロ
Sub sample()
Dim objIE As InternetExplorer
'テスト用フレームページを表示
Call ieView(objIE, "http://www.vba-ie.net/code/test2.html")
'名前のテキストボックスに値を入力
call formText(objIE, "fullname", "田中太郎")
'パスワードボックスに値を入力
call formText(objIE, "pass", "1234")
'テキストエリアに値を入力
call formText(objIE, "textbox", "さわやかです。")
'出身地のセレクトボックスを選択
call formSelect(objIE, "pref", "福岡")
'性別をクリック
call formClick(objIE, "sex", "女")
'好きな色をクリック
call formClick(objIE, "lcolor", "赤")
call formClick(objIE, "lcolor", "黄")
'送信ボタンをクリック
call tagClick(objIE, "input", "送信")
End Sub
テスト用フレームページのソース
<frame src="http://www.vba-ie.net/code/test.html" name="frame1">
<frame src="http://www.vba-ie.net/code/ieview2.html" name="frame2">
</frameset>
実行結果
テスト用フレームページのソースを見て分かるように取得データ内には、フォーム情報がないため未入力となっています。
フォーム情報に入力するためには、フレーム情報を取得する必要があるのですが、簡単な方法がありますので、まずはそちらから解説していきます。
frameを設定するためには、参照元のURLが必要となります。
ソースを確認すれば、URLを確認できますので、そちらのURLに直接アクセスして、対応する方法を紹介します。
フレーム処理のマクロ2
Sub sample()
Dim objIE As InternetExplorer
'フレーム内にある参照元URL
Call ieView(objIE, "http://www.vba-ie.net/code/test.html")
'名前のテキストボックスに値を入力
call formText(objIE, "fullname", "田中太郎")
'パスワードボックスに値を入力
call formText(objIE, "pass", "1234")
'テキストエリアに値を入力
call formText(objIE, "textbox", "さわやかです。")
'出身地のセレクトボックスを選択
call formSelect(objIE, "pref", "福岡")
'性別をクリック
call formClick(objIE, "sex", "女")
'好きな色をクリック
call formClick(objIE, "lcolor", "赤")
call formClick(objIE, "lcolor", "黄")
'送信ボタンをクリック
call tagClick(objIE, "input", "送信")
End Sub
こちらは、フォームページの「http://www.vba-ie.net/code/test.html」に直接アクセスして処理をしています。
こちらはフレーム処理を加えなくても簡単に操作する方法です。
ただ、中には直接アクセスができないこともあるのでその場合は、「framesオブジェクト」を取得して対応していきます。
それでは、以下をご確認ください。
フレーム処理のマクロ3
Sub sample()
Dim objIE As InternetExplorer
Dim objFrame As Object
'テスト用フレームページを表示
Call ieView(objIE, "http://www.vba-ie.net/code/test2.html")
'フレーム情報取得
Set objFrame = objIE.document.frames
'名前のテキストボックスに値を入力
objFrame("frame1").document.getElementsByName("fullname")(0).Value = "田中太郎"
'パスワードボックスに値を入力
objFrame("frame1").document.getElementsByName("pass")(0).Value = "1234"
'テキストエリアに値を入力
objFrame("frame1").document.getElementsByName("textbox")(0).Value = "さわやかです。"
End Sub
実行結果
Set objFrame = objIE.document.frames
まず、フレームのオブジェクトを作成します。
これによりフレームの読込ができ、情報にアクセスすることができます。
objFrame("frame1").document.getElementsByName("fullname")(0).Value = "田中太郎"
こちらは「getElementsByNameメソッド」でname属性が「fullname」のテキストボックスを指定して値を入力します。
基本的にこれまでの書き方と同じで、オブジェクト(objFrame("frame1"))を変更しているだけですので、簡単ですね。
次回は「フレーム内の値を選択」について解説していきます。
次の記事: VBAでIEのフレーム内の値を選択 >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。