dポイントプレゼントキャンペーン実施中!

マクロでwebクエリをLoopしているのですが、20回ほど繰り返すと
”実行時エラー 1004 サイトへのリクエストが正しくありません”
と中断されてしまいます
30秒ほど待ってからデバックでリトライすると、また20回ほど繰り返して止まります

ネットで調べてみると、相手サーバーが連続での接続を拒否しているみたいです
そこでVBAでマクロが中断されたら30秒後にリトライしてくれるような形には出来るのでしょうか?
VBA初心者なので、中断した時の対処方法が全く分かりません
お願いいたします

A 回答 (2件)

こんばんは。



>マクロでwebクエリをLoopしているのですが、20回ほど繰り返す

本来、基本的には相手のサーバーの状態を把握しなくてはなりません。
たぶん、負荷がかかりすぎてしまっているのだと思います。
これは、ネットの攻撃と同じ動きになっているように思うのです。

QueryTableをLoopで行うのなら、まず、アクセスの時間差を大きくとって、
Loop自体を遅らせる必要があると思います。

その場合は、Wait とかSleep とか使います。
モジュールの一番上部に、これを置いて
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
On Error Resume Next
Do

 Call [Query Table Macro]
 Sleep 5000 '5秒間隔または10秒
 DoEvents
Loop Until Err.Number =0
On Error Goto 0

>VBAでマクロが中断されたら30秒後にリトライしてくれるような形には出来るのでしょうか?

実行時エラーがでたら、基本的には、そのままリトライしないほうが安全だと思います。
一旦、オブジェクトを解放して上げたほうがよいでしょう。
そのままですと、Excelが突然閉じてしまうか、フリーズになることがあるからです。
それから、Webクエリ自身で、再アクセスのタイマーは付いているようですね。
    • good
    • 1
この回答へのお礼

こんな方法も有るんですね
何とか2.5秒後に繰り返すことで上手くいきそうです
webクエリ自身の再アクセスのタイマーはよく判らないので
これで上手くいく間は、これで行きます
有難う御座いました

お礼日時:2015/03/09 14:05

sub あなたのマクロ名()


on error goto errH
あなたのコード
exit sub
errH:
select case err.number
case 1004
application.wait (now + timevalue("00:00:30"))
call あなたのマクロ名()
case else
msgbox err.number & err.description
end select
end sub
では?
    • good
    • 0
この回答へのお礼

回答有難う御座います
NO2さんの回答から、私の考え方では良くないらしいので
そちらを参考にさせていただきました

お礼日時:2015/03/09 14:06

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

このQ&Aを見た人はこんなQ&Aも見ています