フレーム内に値を自動入力

これまで「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

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

<frameset rows="50%,50%">
<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をサブルーチンで処理した結果

テスト用フレームページのソースを見て分かるように取得データ内には、フォーム情報がないため未入力となっています。
フォーム情報に入力するためには、フレーム情報を取得する必要があるのですが、簡単な方法がありますので、まずはそちらから解説していきます。

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

実行結果

frameの入力サブルーチン

Set objFrame = objIE.document.frames

まず、フレームのオブジェクトを作成します。
これによりフレームの読込ができ、情報にアクセスすることができます。


objFrame("frame1").document.getElementsByName("fullname")(0).Value = "田中太郎"
objFrame("フレーム名").document.getElementsByName("name名")(添え字).Value = "入力値"

こちらは「getElementsByNameメソッド」でname属性が「fullname」のテキストボックスを指定して値を入力します。
基本的にこれまでの書き方と同じで、オブジェクト(objFrame("frame1"))を変更しているだけですので、簡単ですね。

次回は「フレーム内の値を選択」について解説していきます。

次の記事: VBAでIEのフレーム内の値を選択 >>

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)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。