|
概要: Dim WithEvents IE As InternetExplorer
と
WithEventsキーワードを使って、
IE_NewWindow2(ppDisp As Object, Cancel As Boolean)
と書き、IEのイベントに対して、処理を書いてみました。
テストで下記のようなダウンロード終了時に発生するイベントを書いてみました。
Private Sub WebBrowser0_DocumentComplete(ByVal pDisp As Object, URL As Variant)
'タイトルの代入
Me![txtTITLE] = Me.WebBrowser0.Document.Title
'HTMLの代入
Me![txtHTML] = Me.WebBrowser0.Document.body.innerhtml
End Sub
※メルマガ記事ではオブジェクトの参照設定をしていませんができれば、下記を参考に参照設定してください。 [Microsoft Internet Controls,Microsoft HTML Object Library を参照設定する](このほうが開発時、操作時に楽) また、VistaとIE7の場合は、 [IE7 操作 Vistaで失敗]も参考にしてください。 |
リンク 分類:
[Document(文章)からデータを取得]
/ [Form入力処理]
/ [Linkリンク情報]
/ [Image画像情報]
/ [Frameフレーム処理]
サンプル:
[IEを使ったVBAのサンプル]
/ [小さなVBAでIE操作のコード]
やっと、下記、メルマガで発行した内容です。何かの参考となれば幸いです。
過去のメルマガ[IE操作系の記事一覧]もヨロシクです。
<IE アプリケーションのイベントを横取りする>
どうも、三流プログラマーのKen3です。 今回は、 IEで発生するイベントを横取りしてみます。 いつものように、たいした解説、回答内容じゃないので、 暇つぶしに休み時間などに拾い読みしてください。/* * 1.今回のキッカケ */
メールで下記の質問をもらいました。 ---- >アクセスからIEにはsendkeys を使ってデータを >移動できますが、その逆を考えているのですが >うまい方法はありませんでしょうか. > >IE フォーム から アクセスのフォーム >また、テーブルに直接でも間接でも宜しい >のですが? ---- IEのデータを取るのかぁ、、、タイミングがなぁ・・・/* * 2.調べごと、下準備 */
以前、ランキングページからデータを取り込む処理で、 No.52 InternetExplorer.application .document.body.innerText http://www.ken3.org/backno/backno_vba11.html#52 を参照
Sub ie_get_itext() 'VBA052で解説
Dim objIE As Object 'IEオブジェクト参照用
'インターネットエクスプローラーのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True '見えるようにする(お約束)
'ランキングのページに飛ぶ
objIE.Navigate "http://www.ken3.org/cgi-bin/lime/limemgr.cgi"
'表示されるまで待つ、10秒後にエラーを判断する
Dim time10 As Date '時刻格納用
time10 = DateAdd("s", 10, Now()) '現在から10秒後を計算
Do While objIE.Busy = True 'ビジー、読み込み中の間
DoEvents
If time10 < Now() Then '10秒経過したか?
MsgBox "タイムアウトです"
Exit Sub
End If
Loop
'innerTextを取出す
Dim strTEXT As String
strTEXT = objIE.document.body.innerText '変数に代入
Debug.Print strTEXT 'イミディエイトにも表示
'UserFormを開く(確認用)
frmINFO.txtINFO.Value = strTEXT 'HTMLを代入
frmINFO.Show 'フォームを開く
End Sub |
Private Sub StartIE
Set IE = CreateObject("InternetExplorer.Application.1")
IE.Visible = True
End Sub |
Private Sub IE_NewWindow2(ppDisp As Object, Cancel As Boolean)
Set IEx = CreateObject("InternetExplorer.Application.1")
Set ppDisp = IEx
IEx.Visible = False
End Sub |
Private Sub IEx_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, _ Flags As Variant, TargetFrameName As Variant, PostData As Variant, _ Headers As Variant, Cancel As Boolean) ' Figure out whether the URL requested is on the banned list ' If it is, never show the window or navigate to the site. ' Otherwise, let it through normally. End Sub |
Private Sub コマンド1_Click()
'普通にIEのオブジェクトを作成する
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True '可視をON
IE.GoHome '初期ページに移動する
End Sub |
Private Sub IE_NewWindow2(ppDisp As Object, Cancel As Boolean)
MsgBox "新しいウインドウを開こうとしてます"
End Sub |
Private Sub Form_Load()
'フォームのロードイベントでGoHomeしてみる
Me![WebBrowser0].GoHome '初期ページへ移動
End Sub |
Private Sub WebBrowser0_NewWindow2(ppDisp As Object, Cancel As Boolean)
MsgBox "新しいウインドウを開こうとしてます"
End Sub |
新規ウインドウを開いたテスト結果↑
WithEventsのキーワード無くて、
~~~~~~~~~~
WebBrowser0_NewWindow2(ppDisp As Object, Cancel As Boolean)
で動いたのは、意外だったけど。
あっ、当たり前なのかも?
だって、ボタンだったら、
ボタンのコントロール名_Click
で、クリック処理ですよね。
フォームに貼ったMicrosoft Web Browser コントロールのイベントだからか。
ってことは、他のイベントも選択可能かも。
VBAの編集画面で選択してみる。
↑コントロールの選択
↑イベントの選択
Private Sub WebBrowser0_DocumentComplete(ByVal pDisp As Object, URL As Variant)
'ダウンロード終了時に発生すると仮定して
'タイトルの代入
Me![txtTITLE] = Me.WebBrowser0.Document.Title
'HTMLの代入
Me![txtHTML] = Me.WebBrowser0.Document.body.innerhtml
End Sub |
クラスモジュールの正しい使い方、書き方を知らないので、なんか、長いだけの変な解説動画です。
動作ファイルとソースは クラスモジュール に WithEvents で IE操作のコードを書いてみた] をみてください。
参照設定後、シートにWithEventsを使ってコードを書いてみた
↑こんな方法もあります。
コードは[Dim WithEvents objIE As InternetExplorer Excelシートに書いたコードでイベントを拾う]をみてください。
三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
|
[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]
大分類:[Document.Forms(入力処理)]
/ [Document.Links(リンク情報)]
/ [Document.Images(画像情報)]
/ [Document.Frames(フレーム処理)] | |
|
F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。 項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。 項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。 Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など Blog:[三流君の作業日記]/
[objIEを使用したサンプルコードを見る]/
広告-[通販人気商品の足跡] |
三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。