![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
vbaでieの操作をしているのですが
Sub マクロ1()
Do While ObjIE.Busy = True
DoEvents
Loop
End Sub
でも
Sub マクロ2()
Const READYSTATE_COMPLETE As Long = 4
Do Until ObjIE.ReadyState = READYSTATE_COMPLETE
Loop
End Sub
でも、
表示される前に次のコードへ進んでしまって
エラーになってしまいます。
表示されるまで待たせるには
Application.Wait (Now + TimeValue("00:00:03"))
を付け足すしかないのでしょうか?
(できればこれは使いたくないです)
ご教授よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
こんばんは。
現在は、私は、こうしたコードは一切使っていませんが、Navigate で開くなら、そのサイトの重さに依存するので、いつまでも、Complete にならないこともあります。だから、こういう場合は、どちらかというと、ループの回数を数え(i = i + 1)、一定の回数を越えたら、マクロの離脱(GoTo EndLine or Exit Sub)を強制的にさせます。もちろん、イベントでエラーを得ても良いかもしれませんが、試したことはありません。
'-------------------------------------------
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Const URL As String = "http://www.google.co.jp/"
'Private WithEvents IE As InternetExplorer '参照設定
Sub Test1()
Dim IE As Object
Dim i As Long
Set IE = CreateObject("InternetExplorer.Application")
''Set IE = New InternetExplorer '参照設定の場合
With IE
.Visible = True
.Navigate URL 'URLは、定数
Do While .Busy
DoEvents
Loop
Do Until .ReadyState = 4
DoEvents
Sleep 1000 '1秒
i = i + 1
If i > 50 Then
MsgBox "一定期間で開けませんでした。", vbInformation
GoTo EndLine
End If
Loop
End With
EndLine:
Set IE = Nothing
End Sub
ただ、IEを開く目的でコードを書くなら、Sleep やWait を使わざるを得ないと思います。
そうして、以下のようなイベントを置く必要があるのかは、なんとも言えません。私は、なくても、Waiting の調整で長い間処理してきました。
'参照設定 イベント設定
'Private Sub IE_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Private Sub IE_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
MsgBox "Navigate Completed" '"Document Completed"
End Sub
No.3
- 回答日時:
こんにちは。
#2の回答者です。私の発言は、誤解を受けるような説明でしたので、訂正・補足しておきます。
>Application.Wait (Now + TimeValue("00:00:03"))
>だと3秒たっても終わらない時や、3秒前に終わる時があってムラがあり、いやなんです。
Waitを入れる目的は違うのです。
#2のコードは、本来は、こうしたWait(私の場合、Sleep) を入れるということは、その時間を待たせて開くという働きではなくて、ループを遅らせる目的なのです。ループで早く抜けるか遅く抜けるは、それは誰にも分からないです。それは、Webのステータスのタイミングをとるということです。そのために、Sleep と DoEvents を組み合わせるわけです。そして、時間的な間隔ではなくて、ループの規定回数を越えたら、IEオブジェクトの離脱を取るようにするわけです。そうしないと、無限ループになる可能性があるからです。
もちろん、そういう考え方に足りない部分があるのは承知しています。IEオブジェクトとは言っても、IEそのものでしかありませんから、そこにアドオンがあったり、JavaScript, ActiveX, 画像など、そういうものが障害になります。私の場合は、Google Tool Bar が邪魔しました。
また、IEの設定にも影響を受け、一般的な設定ではHTMLでエラーが発生したら、無限ループ状態になりかねません。今回のマクロでは、あくまでも、「便宜的」なものです。この方法からは、目的のサイトがある以上は、IEオブジェクトを使った完璧な解決というものはないのです。
言葉にすると分かりにくいのですが、そうした考え方の上で、#2のコードが書かれています。
No.1
- 回答日時:
>(できればこれは使いたくないです)
私は、面倒なので、逆に
Application.Wait (Now + TimeValue("00:00:03"))
で済ませていますが、「DocumentCompleteイベント」を利用するという方法が一般的なようです。
●VB6 IEオブジェクトで読み込み完了まで待たせる
http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi? …
使い方については、
●IE アプリケーションのイベントを横取りする
http://www.ken3.org/vba/backno/vba108.html
をご覧ください。
ただし、
●[IE] 新しいブラウザ ウィンドウを開いたときに DocumentComplete イベントが発生しないことがある
http://support.microsoft.com/kb/316593/ja
そうです。
Application.Wait (Now + TimeValue("00:00:03"))
だと3秒たっても終わらない時や、3秒前に終わる時があってムラがあり、いやなんです。
見てみます!ご回答ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBAで NHK NEWSの NEWSデータ内容取得が できない 1 2023/04/09 12:26
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) 【マクロ】リボン、行列、数式・ステータスバを非表示に 4 2022/12/12 07:32
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) エクセルVBA、ファイル名をセルの値で保存の方法を教えてください。 おそれいります。こちらで数々のエ 6 2023/06/30 22:17
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
[VBA]CDOメッセージ送信エラー
-
実行時エラー 3265「要求された...
-
(初心者です)VBAについて。「実...
-
VBA オブジェクトが空かどうか...
-
VBAで作成するメール(開封確認...
-
VBAで Set wb = Sheets(1).Cop...
-
EXCEL VBA オートシェイプナン...
-
Word2007数式でIMEオン/オフを...
-
エクセルのVBAの標準モジュール...
-
オブジェクトが見つかりません
-
PowerPointVBAでスライドマスタ...
-
[C#]static void 関数内でthis
-
コンパイルエラーの対処がわか...
-
ある文字列が全て数字であるか...
-
Visual Basic.NETのエラー("オ...
-
Excel VBA Collection.add で R...
-
Excelでフィルタをかけると警告...
-
ExcelのVBAについて(グラフ操作)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
エクセルのVBAの標準モジュール...
-
エクセルマクロエラー「'Cells'...
-
Excelでフィルタをかけると警告...
-
VBAで Set wb = Sheets(1).Cop...
-
VBAからPDFファイルにパスワー...
-
テキストボックス中の文字列の...
-
エクセルVBAでcode128のバー...
-
EXCEL VBA オートシェイプナン...
-
VBAで作成するメール(開封確認...
-
PowerPointVBAでスライドマスタ...
-
ある文字列が全て数字であるか...
-
エクセルVBAで配列内に空白デー...
-
[VBA]CDOメッセージ送信エラー
-
オブジェクトが見つかりません
-
UserForm1.Showでエラーになり...
-
上下の位置揃えについて
おすすめ情報