【Excelマクロ(VBa)】IE起動~終了


 参照設定


Excelマクロを使ってIEを起動する場合には「Microsoft Internet Controls」が参照設定されている必要があります。また、IEを色々と細かく操作する場合には、「Microsoft HTML Object Library」も参照設定されている必要があります。

1.まず[ツール]-[参照設定]から「参照設定」画面を起動します。



2.「Microsoft Internet Controls」「Microsoft HTML Object Library」にチェックが無ければチェックをし、[OK]ボタンを押します。




 IE起動処理


IEを起動するには下記のようにコーディングします。例としてYahooの乗換案内を開きます。

'■ 変数設定
Dim objIE As InternetExplorer

'■ オブジェクト生成
Set objIE = CreateObject("InternetExplorer.Application")

'■ IEを表示
objIE.Visible = True

'■ Yahooの乗換案内へ接続
objIE.navigate "http://transit.yahoo.co.jp/"

尚、「Microsoft Internet Controls」が参照設定されていない場合、変数設定「Dim objIE As InternetExplorer」の箇所で下記画面のように「ユーザ定義型は定義されていません。」というエラーが発生します。(変数定義で「InternetExplorer」の代わりに「Object」を使う場合、参照設定が無くてもエラーが発生しませんでした)




   IE起動確認方法


IEを起動させただけではIE上のデータの読み込みや操作は出来ずにエラーとなります。オブジェクトの状態をチェックする事によってロードが完了し、操作が可能な状態が確認できます。

'読み込み待ち(READYSTATE_COMPLET = 4)
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
  DoEvents
Loop

内容
0:READYSTATE_UNINITIALIZED イニシャライズされていない
1:READYSTATE_LOADING データをロード中(操作不可?)
2:READYSTATE_LOADED データをロード完了(操作不可?)
3:READYSTATE_INTERACTIVE ロード中でも操作可能
4:READYSTATE_COMPLETE ロードが完了し操作可能
ただし、管理人が乗換案内で出発欄に値を入力しようとしたところエラーとなりましたので、もう一工夫必要な場合がありそうです。ステータスで完了/未了が確認できない以上、出発欄に値を入力し、エラーが出たら待つようにします。

'書き込み待ち
Do
  'エラーの初期化
  Err.Clear
  'エラーが発生した場合も処理を継続する
  On Error Resume Next

  '出発欄に「東京」と入力
  objIE.document.getElementById("sfrom").Value = "東京"

  DoEvents
'エラーが無くなるまでループする
Loop Until Err.Number = 0




   IE終了処理


もしバッチ処理でIE起動する場合、処理の終了時にIEを終了しないとプロセスが残ったままとなり、レスポンス等の問題となりますので、終了の仕方を下記に記述します。

'■ IE終了
objIE.Quit

'■ オブジェクトを解放
Set objIE = Nothing

管理人 について

趣味:映画鑑賞・音楽鑑賞・ゲーム・旅行 仕事:会社員(IT関連)
カテゴリー: VBa(Excelマクロ), システム開発 パーマリンク

コメントを残す