• 締切済み

DocumentCompleteイベントプロシジャに制御が渡らない

VB6(VBA)でIEを操作し、表示ページのソースの読込みの確認にDocumentCompleteイベントを使用することを考えています。それで下記のテストプログラムを作成しますたが、DocumentCompleteイベントプロシジャに制御が渡りません。 その原因をご教示して頂きたくお願いします。 Dim WithEvents objIE As InternetExplorer --------------------------------------------------------------- Private Sub CommandButton1_Click() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" While objIE.readyState <> 4 While objIE.Busy = True DoEvents Wend Wend objIE.Navigate "http://www.goo.ne.jp/" While objIE.readyState <> 4 While objIE.Busy = True DoEvents Wend Wend End Sub ------------------------------------------------------------- Private Sub objIE_DocumentComplete(ByVal pDisp As Object, URL As Variant) MsgBox "ソースの読込み完了" End Sub

みんなの回答

回答No.3

もうひとつだけ、ヒントを。 Dim WithEvents objIE As InternetExplorer の意味を理解しておいて下さい。 その上で下記のコードの意味する事に注目して下さい。 Dim objIE As Object 上記が理解できないなら、そのコードを書くように指示した方に教えてもらって下さい。

回答No.2

念の為に補足しておきますが、VB のバージョン、サービスパックの有り無し、IE のバージョンやOS によってもコードが違ってきますし、出来る事と、出来ない事などがあります。 本来質問される前に詳しい環境等を書くようにして下さい。 (違い等が理解できているのなら問題ないのですが)

isunsun
質問者

補足

回答が大変遅くなり申し訳ありません。年末より個人で利用するこのアプリケーションの作成に時間が割けなくなり遅れてしまいました。 ご指摘頂きました間違いを修正し、DocumentCompleteイベントプロシジャが実行されることを確認しました。ありがとうございました。 しかし、そのイベントプロシジャで「オブジェクト変数またはブロック変数が設定されていません(Error91)」のエラーが起こります。 解決方法を教えて頂きたくお願いします。当方の周りにはVB使い(?)が一人もいなくて苦戦しています。 下記のプログラムは、 http://hanatyan.sakura.ne.jp/patio/read.cgi?no=176 に掲載されているシンプルなコードを引用させて頂きました。 Option Explicit 'ShDocVw.dllを参照設定しておいて下さい。 Private WithEvents IE As SHDocVw.InternetExplorer Private myURL As String Private Sub Command1_Click() myURL = "https://login.yahoo.co.jp/config/login_verify2?.src=ym" '起動中のIEを閉じる場合 If Not IE Is Nothing Then IE.Quit Set IE = Nothing End If Set IE = New SHDocVw.InternetExplorer '指定のURLを表示 IE.Navigate2 myURL IE.Visible = True 'IE を表示 End Sub Private Sub IE_DocumentComplete(ByVal pDisp As Object, URL As Variant) If CStr(URL) <> myURL Then Exit Sub End If With IE .Document.Forms(0).Elements("login").Value = "ログイン用IDを記入"    ***** これでEroor91 ***** .Document.Forms(0).Elements("passwd").Value = "パスワードを記入" 'IDとパスワードを記憶用のチェックボックスにチェックを入れる If .Document.Forms(0).Elements(".persistent").Checked = False Then .Document.Forms(0).Elements(".persistent").Click End If 'ログインボタンをクリック .Document.Forms(0).submit End With End Sub なお、当方の環境は、 OS:Windows2000 SP4、VBA:Excel2000 SP3 です。 よろしくお願いします。

回答No.1

質問投稿日時:09/12/21 20:23 質問番号:5538554 で回答している事を理解しておられないのでしょうか? 私の回答したコードの意味も理解しておられない。 回答番号:No.2 の方を支持されておられるようですが、私の回答したコードには、No.2 の方の答えられた事が考慮されたコードになっている事も理解していますか? まず、あのコードの持つ意味を理解できないとVBからIEを扱うのは、無理です、WEBページは、個々に書いてある内容が違いますので、そのサイトのソースコードを読み取って個々に対応する必要があるので、十分理解して、応用しないとうまく動作しません。 DocumentComplete イベント待つように何度も回答したはずなのに、今だに下記のような誤ったコードを書いておられる。 >While objIE.readyState <> 4 >While objIE.Busy = True >DoEvents >Wend >Wend 上記のコードの意味を理解していますか、貴方が独自に考えたものですか?  どこかで見かけたコードですか? (それなら、それを書いた方は信用出来る方ですか) 掲示板等に書かれているコードは、質問者のコードと信頼できる回答者の書いたコードを区別して、利用するようにしないと間違った知識を正しい物と誤解してしまいますよ。 私の言っている事が信用できなければ、[DocumentComplete]をキーワードにGoogle等で検索して見て下さい。 (特に最新の情報をよく読んでみて下さい。)

isunsun
質問者

お礼

投稿欄を間違えましたので、再投稿させて頂きました。 回答が大変遅くなり申し訳ありません。年末より個人で利用するこのアプリケーションの作成に時間が割けなくなり遅れてしまいました。 ご指摘頂きました間違いを修正し、DocumentCompleteイベントプロシジャが実行されることを確認しました。ありがとうございました。 しかし、そのイベントプロシジャで「オブジェクト変数またはブロック変数が設定されていません(Error91)」のエラーが起こります。 解決方法を教えて頂きたくお願いします。当方の周りにはVB使い(?)が一人もいなくて苦戦しています。 下記のプログラムは、 ​http://hanatyan.sakura.ne.jp/patio/read.cgi?no=176​ に掲載されているシンプルなコードを引用させて頂きました。 Option Explicit 'ShDocVw.dllを参照設定しておいて下さい。 Private WithEvents IE As SHDocVw.InternetExplorer Private myURL As String Private Sub Command1_Click() myURL = "​https://login.yahoo.co.jp/config/login_verify2?.src=ym"​ '起動中のIEを閉じる場合 If Not IE Is Nothing Then IE.Quit Set IE = Nothing End If Set IE = New SHDocVw.InternetExplorer '指定のURLを表示 IE.Navigate2 myURL IE.Visible = True 'IE を表示 End Sub Private Sub IE_DocumentComplete(ByVal pDisp As Object, URL As Variant) If CStr(URL) <> myURL Then Exit Sub End If With IE .Document.Forms(0).Elements("login").Value = "ログイン用IDを記入"    ***** これでEroor91 ***** .Document.Forms(0).Elements("passwd").Value = "パスワードを記入" 'IDとパスワードを記憶用のチェックボックスにチェックを入れる If .Document.Forms(0).Elements(".persistent").Checked = False Then .Document.Forms(0).Elements(".persistent").Click End If 'ログインボタンをクリック .Document.Forms(0).submit End With End Sub なお、当方の環境は、 OS:Windows2000 SP4、VBA:Excel2000 SP3、IE:6.0 です。 よろしくお願いします。

関連するQ&A