
Sub test()
Dim ObjIE As InternetExplorer
Set ObjIE = CreateObject("InternetExplorer.Application")
ObjIE.Navigate "http://www.yahoo.co.jp/"
ObjIE.Visible = True
Do While ObjIE.Busy = True
DoEvents
Loop
Debug.Print ObjIE.LocationName
Set ObjIE = Nothing
End Sub
-------------------------------------
を実行した所、イミディエイトウインドウに何も表示されないので
ObjIE.LocationNameを
ObjIE.Refreshに変えてみたところ、
------------
実行時エラー ‘-2147467259
オートメーションエラーです。エラーを特定できません。
------------
となりました。
ステップインでゆっくり実行するとできたことから、
ObjIE.Refresh
にたどり着くまでに、IEにサイトが表示されてないのが原因のようです。
と言いう事は、
------------
Do While ObjIE.Busy = True
DoEvents
Loop
------------
のコードは全く持って無意味なのでしょうか?
「表示するまで待つ」と言う意味だと思っていたのですが
表示し終わる前に次のコードに進んでしまっているようです。
No.2ベストアンサー
- 回答日時:
こんにちは。
#1、cjです。遅くなりましたが#1お礼欄へのレスです。
> 組み合わせたものなのでしょうか?
はい、その通りです。
最近は、順番に分けて書く人の方が少ないようですし、
組み合わせて書いた方がエラーが出る可能性が低いということもあるようで
ひとまとめにして書いた方がいいですね。デメリットはないですから。
説明が不親切でした。言葉足らずですみません。
一応、エラーに備える意味では
On Error Resume Next
Do While ObjIE.Busy = True Or ObjIE.ReadyState <> 4
DoEvents
Loop
On Error GoTo 0
こう↑書く方がベターかも知れません。
それから、
.Busy がTrueでなくなるまで、.ReadyState が"complete"するまで
DoEvents しながら待つ、という意味ですから、
DoEvents が、直接IEに何かしら働きかけている訳ではありませんから、
> やはりDoEventsだけでは不十分のようですね。
は
Do While ObjIE.Busy = True だけでは不十分です。
ですね。
再度ご回答ありがとうございました。
とてもわかりやすかったです!これでエラーにならずに済みます!大変助かりました。
また機会があったらよろしくお願いします。
No.1
- 回答日時:
こんにちは。
Do While ObjIE.Busy = True
DoEvents
Loop
だけではなくて、
Do Until ObjIE.ReadyState = 4
DoEvents
Loop
も加えてみましょう。
大抵は、このふたつセットで使います。
なので、答えとしては、
「...だけでは十分ではない」です。
無意味ってことはないですね。
DoEvents は、この場合3通りの意味を持ちます。
・制御を渡す・タイムラグを作る・コードの実行を一時停止させる場合のきっかけ
それと、事前バインディング(参照設定)してあるなら
CreateObjaectを使うのは勿体ないというか
参照設定が無駄になっています。
一応、以下のようにして試してみては如何でしょう。
Sub Re7751771a()
' ' 参照設定
' ' Microsoft HTML Object Library
' ' Microsoft Internet Controls
Dim ObjIE As InternetExplorer
Set ObjIE = New InternetExplorer
ObjIE.Navigate "http://www.yahoo.co.jp/"
ObjIE.Visible = True
Do While ObjIE.Busy = True Or ObjIE.ReadyState <> 4
DoEvents
Loop
Debug.Print ObjIE.LocationName
Set ObjIE = Nothing
End Sub
やはりDoEventsだけでは不十分のようですね。
Do Until ObjIE.ReadyState = 4
DoEvents
Loop
とセットと覚えます。
DoEventsは
・制御を渡す
・タイムラグを作る
・コードの実行を一時停止させる場合のきっかけ
と言う意味があるのですか。
提示して頂いたサンプルコードの、
Do While ObjIE.Busy = True Or ObjIE.ReadyState <> 4
DoEvents
Loop
は、
Do While ObjIE.Busy = True
DoEvents
Loop
と
Do Until ObjIE.ReadyState = 4
DoEvents
Loop
を組み合わせたものなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAで NHK NEWSの NEWSデータ内容取得が できない 1 2023/04/09 12:26
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Excel(エクセル) 【エクセルマクロ】既に開いているIEの、サイズや表示位置を変更するには 4 2022/12/01 22:57
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Visual Basic(VBA) エラー処理 3 2022/04/11 14:58
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) VBA ステータスバー DoEvents 1 2023/03/30 12:22
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) IBM Notes9のメールをExcelVBAにて送信するコードについての質問です。 以下のコードを 3 2023/06/21 17:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
ExcelVBAマクロコードの「実行...
-
EXCEL/VBAで、自分のPCだけエラ...
-
実行時エラー -'-2147417848
-
【Excel VBA】マクロをボタンに...
-
VBAの実行時エラー91!どうしよ...
-
【VBA】ボタンに登録したマクロ...
-
VBAがブレークモードになっ...
-
ADODB.Streamを使用してUTF-8を...
-
EXCEL VBAマクロ中断でデバッグ...
-
VBAでのエラー
-
Excel TextBoxクラスのCharacte...
-
なぜエラーになるのでしょうか...
-
実行時エラー48発生時のDLL特定...
-
■VBA■ SUMとAVERAGEの違い
-
DoEventsは意味ない?
-
AccessVBAでExcelを起動し、罫...
-
エクセルでURLに特定文字が含ま...
-
IEを操作する エクセルマクロ...
-
VBAのChrome操作のエラーについ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
実行時エラー -'-2147417848
-
ExcelVBA Range クラスの Page...
-
マクロについて教えてください...
-
VBAでのエラー
-
【Excel VBA】マクロをボタンに...
-
実行時エラー48発生時のDLL特定...
-
EXCEL VBAマクロ中断でデバッグ...
-
なぜエラーになるのでしょうか...
-
実行時エラー3001「引数が間違...
-
OLEDB.NETで接続できない
-
INSERT INTOステートメント構文...
-
VBAのエラー発生場所をメッセー...
-
VB6+SQL サーバー 2000 で 実行...
-
Outlook.ApplicationをCreateOb...
-
ADODB.Streamを使用してUTF-8を...
-
カーソルオープンでエラー(ORA...
-
Invalid procedure call or arg...
おすすめ情報