ie-excel

エクセル・マクロでie操作

Excel VBAでIEを操作 iframe(インナーフレーム)を操作する

2018/11/04

フレームページは随分と減少しましたが、まだまだ現役のiframe(インナーフレーム)をExcelマクロから操作する方法を今回は紹介します。

前準備

  • Visual Basic Editor の画面から「ツール」→「参照設定」を選択します。
  • 「Microsoft Internet Controls」と「Microsoft HTML Object Library」にチェックを入れて、OKを押す

iframeを操作する

ヒトがieのiframeの処理をする場合は以下の操作をします。

  1. IEを立ち上げる
  2. URLを入力する
  3. サイトが表示されるのを待つ
  4. フレームページが表示されるのを待つ
  5. インナーフレームの中身を操作する

上記をVBAで表現すると以下のようになります。

実際のコード
実際にインナーフレームページの内容が画面遷移されていませんか?

では、ソースの解説です。

変数を宣言
使用する変数を宣言しています。

一応フレームページのため、「FramesCollection」用の変数をしていますが、今回は使用していません。

URL指定してサイトが表示されるのを待つ
ここまではいつもな感じです。

初めて見る方は、以下のサイトでここまでをもう少し詳しく解説していますので、よろしければご覧ください。

Excel VBA でIEを操作して特定サイトを開く

フレームの数を数える
ドキュメントにフレーム数をカウントしています。
数は「Length」プロパティにセットされます。

「iframe」もしくは「frame」の数が収録されます。

フレームがあった場合、処理をする
フレームがあった場合、「・・・・」の処理をします。

フレーム内のサイトが表示されるのを待つ
親ページの「busy」や「ReadyState」だけではフレーム側のページが表示されているかを厳密には判断できません。
そのため、フレームページ側の処理が終了されていることも確認します。

まずフレームページは「0」から始まる配列に収録されてますので、フレームページの数だけ、フレームページ側の「readyState」を確認する必要があります。

注意したいのは、

  • フレーム側のドキュメントをオブジェクトに入れることができないことがあります。
    (Youtubeなどで確認してみてください)

そのためにオブジェクトにセットできずにエラーとなってもいいように「On Error」を入れています。

「readyState」の確認方法も以下の通り異なります。

  • フレームページ側の「readyState」は「document」に収録されていること
  • 変数は「4」ではなく「complete」で返却されること

 

フレーム内を操作する(クリック)
上記の通り、一番目のフレームに対して最初のアンカータグをクリックするような操作は、他のページと操作方法は大きく変わりません。

通常は「ieDoc」に対して、「操作対象タグを探し」て「操作する」やり方でしたが、iframe(インナーフレームページ)の場合は

「ieDoc.frames(フレーム番号).document」に対して「操作」することとなります。

-ExcelでIE操作