• 締切済み

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

  • 現在表示されているURLを取得したいのですが

    Sub test1() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.goo.ne.jp/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Debug.Print objIE.Navigate Set objIE = Nothing End Sub //////////////////////////////////////////////// をやろうとすると、 Debug.Print objIE.Navigate の部分で、「引数は省略できません。」とエラーになります。 どう修正すればいいか教えてください。 ("http://www.goo.ne.jp/"はダミーです)

  • オブジェクト変数または With ブロック変数が設定されていません。

    下記の様に組みましたが、下記の★印の所で止まる様な事があります。 毎回止まるわけではないのですが、止まる時に「オブジェクト変数または With ブロック変数が設定されていません。」と表示されますが、 原因は何か?どの様にすればいいのか?など詳しく教えてください。 よろしくお願いします。 Sub test() Dim objIE As Object Dim strCOMMENT As String Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://" While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'データをセットする 'htmlドキュメント フォーム(0番目) アイテムに転記(代入)する objIE.Document.forms(0).Item("username").Value = "11111" objIE.Document.forms(0).Item("password").Value = "11111" While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.all.subm.Click While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop For Each link In objIE.Document.Links If link.href = "http://" Then link.Click End If Next While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'タイトル・コメントの読み込み strtitle = Sheets("sheet1").Range("k7") strCOMMENT = Sheets("sheet1").Range("k9") Application.WindowState = xlMinimized While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.forms(0).Item("title").Value = strtitle objIE.Document.forms(0).Item("comment").Value = strCOMMENT While objIE.readystate <> 4 While objIE.busy = True DoEvents ' Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Document.all.submit.Click While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop 'フォーム(0番目)を .Submit(確認) する objIE.Document.forms(0).getElementsByTagName("input")(11).Click '←★この部分で止まる時があります。 While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 6, Now()) Do While Now() < Wait_Time DoEvents Loop For Each link In objIE.Document.Links If link.href = "http://" Then link.Click End If Next While objIE.readystate <> 4 While objIE.busy = True DoEvents Wend Wend Wait_Time = DateAdd("s", 7, Now()) Do While Now() < Wait_Time DoEvents Loop objIE.Quit '.Quitで閉じる End Sub

  • 「オブジェクトの破棄」と「メモリの解放」は同じ意味

    「オブジェクトの破棄」と「メモリの解放」は同じ意味ですか? ********************************* Sub Sample1() Dim objIE As Object Dim buf As String Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://oshiete.goo.ne.jp/" Do While objIE.busy DoEvents Loop Do While objIE.Document.readyState <> "complete" DoEvents Loop Set objIE = Nothing End Sub ********************************* の場合の「Set objIE = Nothing」は、 「オブジェクトの破棄」でしょうか? 「メモリの解放」でしょうか? どちらでもありますか? ご回答よろしくお願いします。

  • サイトのソースのsubmitボタンの数を取得したい

    サイトのソースのsubmitボタンの数を取得したいのですが Sub test() Dim objIE As InternetExplorer Dim MyRow As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.coneco.net/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop Debug.Print objIE.Document.all.tags("input").Type("submit").Count Set objIE = Nothing End Sub だとうまく動きません。 どう、変更すればよろしいですか?

  • ie操作 ローカルパスだとエラーになる

    ヤフーなら問題なくコードが動くのに、URLがローカルのパスだと、エラーになってしまいます。 具体的には、 *********************************************************** Sub Sample1() Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.yahoo.co.jp/" objIE.Visible = True Do Until objIE.ReadyState = 4 Loop Do While objIE.Busy = True DoEvents Loop End Sub *********************************************************** だと、問題なく実行されるのに、 *********************************************************** Sub Sample2() strFName = MyDesktop & "\index.html" Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate strFName objIE.Visible = True Do Until objIE.ReadyState = 4 Loop Do While objIE.Busy = True DoEvents Loop End Sub ------------------------- Function MyDesktop() Dim WSH As Variant Set WSH = CreateObject("Wscript.Shell") MyDesktop = WSH.SpecialFolders("Desktop") Set WSH = Nothing End Function *********************************************************** だと、 Do Until objIE.ReadyState = 4 で オートメーションエラー 起動されたオブジェクトはクライアントから切断されました。 となります。 なぜローカルだと、エラーになるのでしょうか? 何が違うのでしょうか?

  • https:/○○login.php エラーになる

    win7 32ビット オフィス2010です。 https:/○○login.php のようなサイトを開こうとすると ------------------------------------------------------ Dim objIE As InternetExplorer Sub test() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https:/○○login.php" Call WaitIE1(objIE) End Sub ------------------------------------------------------ Function WaitIE1(objIE As InternetExplorer) Do While objIE.Busy = True DoEvents Loop Do While objIE.Document.ReadyState <> "complete" DoEvents Loop End Function ------------------------------------------------------ このコードがエラーになります。 Do While objIE.Document.ReadyState <> "complete" の部分で 実行時エラ― -2147417848 オートメーションエラーです。 起動されたオブジェクトはクライアントから切断されました。 となります。 objIEをウォッチ式に登録してみてみると Function WaitIE1(objIE As InternetExplorer) の時に、「変数なし」となっています。 objIE.Navigate http://www.goo.ne.jp/ にすれば、 エラーにならずに、コードが最後まで行きます。 ウォッチ式を見ても 「変数なし」にはなりません。 この違いは何でしょうか?

  • エクセルのVBAで最終行までループする方法

    エクセルのVBAで最終行までループする方法を教えてください。 下記がコードになります。 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate Range("A1").Value While objIE.ReadyState <> 4 Or objIE.Busy = True DoEvents Wend Range("B1").value = objIE.Document.all("zoom1").href

  • 「ページが表示されました」まで取得したい

    IEを立ち上げてステータスバーのテキストを取得して、 「ページが表示されました」を取得出来たら、次のコードへ進みたいのですが、 下のコードでStatusTexttを書き出しても「ページが表示されました」まで取得できません。 Sub test() Dim objIE As InternetExplorer Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.goo.ne.jp/" objIE.Visible = True Workbooks.Add Cells(1, 1) = objIE.StatusText i = 2 Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Cells(i, 1) = objIE.StatusText i = i + 1 Loop Cells(i, 1) = objIE.StatusText Set objIE = Nothing End Sub Do While objIE.Busy = True Or objIE.ReadyState <> 4 ここら辺のコードを弄ればいいような気がしますが、うまくいきません。 ご回答よろしくお願いします。

  • これは何がおかしいですか?

    こんばんは。 会社のWEBアプリを開くコードなのですがエラーになります。 Dim objIE As Object Sub webアプリ() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://○○.aspx" Call IE_wait End Sub Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub こうすると、 Do Until objIE.ReadyState = READYSTATE_COMPLETE の部分で、 --------------------------- 実行時エラー-2147417848 もしくは 実行時エラー-2147023179 オートメーションエラーです。 そのインターフェイスは認識されません。 --------------------------- になります。 最初に実行時エラー-2147417848になり、デバッグボタンを押すと 実行時エラー-2147023179に変化します。 Dim objIE As Object を Dim objIE As InternetExplorer にしてもエラーが発生します。 しかし、 objIE.Navigate "https://○○.aspx" を objIE.Navigate http://www.goo.ne.jp/ にすると、エラーは発生しません。 https://○○.aspxは存在するアドレスです。 問題なく表示はされています。 表示するまで待たせて次のコードを書きたいので、表示するまで待つ処理をしたいです。 ご教授よろしくお願いします。

  • ie操作 ボタンが押せる時と押せない時がある

    こんばんは。よろしくお願いします。 ie操作でボタンが押せる時と押せない時があるのですが、 違いがわかりません。 --------------------------------------------------------- Sub test1() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.mitsui-direct.co.jp/customer/" 'ダイレクトにログインページへはいけない。 Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate "javascript:gotoMyhp();" Set objIE = Nothing End Sub --------------------------------------------------------- これなのですが、http://www.mitsui-direct.co.jp/customer/のサイトへいって、 右側の「Myホームページログイン」を押したいのですが、 最初は、objIE.Navigate "javascript:gotoMyhp();" でうまくいってたのですが、 なぜか出来なくなってしまいました。 そんな事ありますか? コードが間違ってるのでしょうか? ご教授よろしくお願いします。