過去記事の
Dim WithEvents objIE As InternetExplorer 'Excelシートに書いたコードでイベントを拾う
http://d.hatena.ne.jp/ken3memo/20100114/1263452016
で、シートのコードでWithEventsを使って、IEのイベントを拾ってました。
このコードを クラスモジュールに書いて、使ってみたいと思います。
/vba/zip/IE_Class_TEST.zip
↑テストファイル(Excel2007 Vista IE9 でテスト)を使いながら、遊んでみてください。
単純にクラスモジュールに貼っても動かないと思うので、イロイロと遊んでみます。
標準モジュールに
Option Explicit Private Sub testMAIN() Dim myIE As Class1 Set myIE = New Class1 'IEを開く myIE.OpenIE 'ページを開く myIE.GoURL ("http://www.google.co.jp/") '無限ループ(IEが無くなるまで) While myIE.getFLG = True '内部フラグがOFFになるまで DoEvents Wend MsgBox "処理終了" End Sub
クラスモジュールに 名前Class1で
Option Explicit 'クラスモジュールにコードを書いてみては? Dim WithEvents objIE As InternetExplorer 'イベント拾いたいので Dim WithEvents objNEW_IE As InternetExplorer 'でオブジェクト変数を定義して_NewWindow2で新規IEを作成、 Private FLG As Boolean 'フラグ、プロパティで使う Sub OpenIE() 'IEを開く '初めの頭は普通に代入。 Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True FLG = True 'フラグをON End Sub Sub GoURL(sURL As String) objIE.Navigate sURL 'ページを移動する End Sub Private Sub objIE_DocumentComplete(ByVal pDisp As Object, URL As Variant) Debug.Print "[" & URL & "]" 'URLで判断 If URL = "http://www.google.co.jp/" Then 'google検索項目(name=q)にセットする。 objIE.Document.getElementsByName("q")(0).Value = "三流" End If If URL = "http://www.yahoo.co.jp/" Then '検索項目(name=p)にセットする。 objIE.Document.getElementsByName("p")(0).Value = "三流" End If End Sub 'objIE_NewWindow2 のイベントを拾う 新しいウインドウ Private Sub objIE_NewWindow2(ppDisp As Object, Cancel As Boolean) Set objNEW_IE = CreateObject("InternetExplorer.Application") Set ppDisp = objNEW_IE '作ったオブジェクトを代入 objNEW_IE.Visible = True End Sub Private Sub objIE_OnQuit() 'IEの終了時 Set objIE = Nothing FLG = False 'フラグOFF End Sub '新しいウインドウIEのイベントテスト '下記のように、作成したIEのイベント(ここでは読み込み完了)で処理したサンプルです Private Sub objNEW_IE_DocumentComplete(ByVal pDisp As Object, URL As Variant) MsgBox "あたらしく開かれたURLは" & URL End Sub '値をプロパティとして返す? Property Get getFLG() As Boolean getFLG = FLG End Property
解説、試行錯誤のテスト動画、今回は長いです
クラスモジュールの正しい使い方、書き方を知らないので、
なんか、長いだけの変な解説動画 http://www.youtube.com/watch?v=2QUnu-FE1_4 です。
www.youtube.com
↑う〜ん、IEのイベントを横取りして、もっとスマートに書けそうな気もしますが。
※これだったら、今まで通り、.busyで回したり、shellから新しいウインドウを取得と変わらないかなぁ。
終わりのあいさつ
もっと、クラスモジュールの効果的な使用方法を学ばないとなぁ・・と思いつつ、
今回も逃げるように失礼します。 三流プログラマー Ken3
/vba/zip/IE_Class_TEST.zip
↑テストファイル(Excel2007 Vista IE9 でテスト)を使いながら、遊んでみてください。