プロが教えるわが家の防犯対策術!

過去の回答を参考にエクセルでWEB画面をすべて選択しエクセルの所定のセルに貼り付けするマクロを作成しました。処理を追加していった結果、下記のようなマクロが完成しました。ステップインで動作確認できましたが、マクロ実行から動かすと途中で止まります。
止まる箇所は、
While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True
DoEvents
Wend
DoEvents

この記述でWEBが遅く開く時に対応するよう作成しましたが、ここで止まります。(抜け出せません)
また、この記述を削るとステップインではうまく動きますが、マクロの実行から動かすと何回目かで

objIE.ExecWB 17, 0
すべて選択するときに止まります。

どこが悪いのか教えていただけないでしょうか?

使用、作成したのは、excel2007 及びexcel2010です。どちらでも動きません。


よろしくお願い致します。

Sub test()

Dim URL As String
Dim URL2 As String
Dim URL3 As String
Dim CD As String
Dim i As Integer


For i = 1 To 199
CD = Worksheets("CD").Cells(i + 1, 1).Value

URL2 = "貼り付けたいWEBのURL"
URL3 = CD ’縦一列にコードを入力しているシート
URL = URL2 & URL3
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True

objIE.navigate URL

While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True
DoEvents
Wend
DoEvents


objIE.ExecWB 17, 0
objIE.ExecWB 12, 0
Sheets.Add
ActiveSheet.Name = 199 - i
Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML"

objIE.Quit

Set objIE = Nothing

Next
End Sub

よろしくお願いいたします。

A 回答 (1件)

もし未定義なら、


const READYSTATE_COMPLETE=4 をどこかに定義しておくとか
While objIE.readyState <> 4 Or objIE.Busy = True
のようにします。

当方の場合、
while のあとのdoeventsや
objIE.ExecWB 17, 0と
objIE.ExecWB 12, 0
のあとにもdoeventsを3つくらい入れておくとうまくいくようです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!