【发布时间】:2020-06-21 13:51:08
【问题描述】:
我正在编写一些通过 url 打开多个文件的代码。这一切都很好,但是过了一会儿,我从中提取这些数据的服务器阻止了我,这引发了一条错误消息。
我试图做的是创建一个错误处理程序来重置错误,然后在等待 5 秒后从顶部继续。我尝试了两件事
-
在错误恢复下,跳过该行。这似乎没有任何作用,因为代码仍然超时。
-
转到错误处理程序,等待 5 秒,重置错误,然后从代码所在的位置继续。
任何想法我做错了什么。下面的示例文件路径;
Sub TESTING()
Call START
Dim i As Integer
Workbooks("SHARE PRICE CREATOR.xlsb").Sheets("links").Activate
For i = 2 To Application.WorksheetFunction.CountA(Range("E:E"))
xtable = Cells(i, 5)
xURL = Cells(i, 4).Value
CONTINUE:
On Error GoTo Errhandle
Workbooks.Open xURL, FORMAT:=6, DELIMITER:=","
Workbooks("SHARE PRICE CREATOR.xlsb").Sheets("links").Activate
Cells(i, 6) = "OK"
Next
Errhandle:
On Error Resume Next
If Err.Number > 0 Then
Cells(i, 6) = Err.Number
End If
On Error GoTo 0
Application.Wait (Now + TimeValue("0:00:5"))
GoTo CONTINUE
Call ENDING
End Sub
谢谢
斯科特
【问题讨论】:
-
旁注:我认为 On Error Resume Next 在您的 ErrHandle 中没有任何用途。将 Workbooks("SHARE PRICE CREATOR.xlsb").Sheets("links") 放入变量中,并以此限定您的范围调用。避免隐式 Activesheet 引用。
-
使用 Err.Clear 清除错误
-
如果所有任务在运行到您的错误处理程序之前,您将需要一个 Exit Sub 才能成功完成。此外,您需要一个退出策略来避免无限循环的可能性。我个人会在进入下一个 url 之前采用最大重试策略,并且每隔 x 次请求等待成为一个好网民。
-
每 20 个周期的等待是选项 3,我不知道如何做到这一点,尽管除了复制具有不同 i 范围的代码