- ベストアンサー
DoEventsは意味ない?
- ObjIE.Refreshで実行エラーが発生 -2147467259
- Do While ObjIE.Busy = TrueとDoEventsは無意味?
- ObjIE.LocationNameが表示されない
- みんなの回答 (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 だけでは不十分です。 ですね。
その他の回答 (1)
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。 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 を組み合わせたものなのでしょうか?
お礼
再度ご回答ありがとうございました。 とてもわかりやすかったです!これでエラーにならずに済みます!大変助かりました。 また機会があったらよろしくお願いします。