如何在VBA中自动中断和重新启动代码执行?错误处理

如何在VBA中自动中断和重新启动代码执行?错误处理,vba,excel,error-handling,runtime-error,Vba,Excel,Error Handling,Runtime Error,我在VBA中编写了一个代码,从谷歌的专利中获取网络信息,它工作得很好,但不幸的是,它很容易出现两个错误 最常见的两种是 运行时错误 Windows OLE正在等待 发生这种情况时,只需按ok、ctrl-break、F5并再次执行即可。另外,由于我不知道的原因,代码似乎在x分钟后变慢,然后中断并重新启动它会加快速度 因此,作为一个补丁所有的解决方案,我想做以下几点。在x分钟后(或者说40次迭代后更好),自动中断执行并重新开始。 第二种错误处理方法是执行以下操作 如果时间t的范围(“A1.End

我在VBA中编写了一个代码,从谷歌的专利中获取网络信息,它工作得很好,但不幸的是,它很容易出现两个错误

最常见的两种是

  • 运行时错误
  • Windows OLE正在等待
发生这种情况时,只需按ok、ctrl-break、F5并再次执行即可。另外,由于我不知道的原因,代码似乎在x分钟后变慢,然后中断并重新启动它会加快速度

因此,作为一个补丁所有的解决方案,我想做以下几点。在x分钟后(或者说40次迭代后更好),自动中断执行并重新开始。 第二种错误处理方法是执行以下操作

如果时间t的范围(“A1.End(xlDown))=时间t+600的范围(“A1.End(xlDown)),则重新启动代码执行,否则继续代码执行


我基本上希望能够自动化错误处理,这样我就可以在一夜之间运行代码并像婴儿一样睡觉:)

我认为Excel VBA中没有允许您以编程方式中断代码然后继续的代码语句。但是,您可以使用VBA模拟按下“中断”按钮,但我不知道如何让代码按下“继续”按钮,因为代码已经暂停

Application.VBE.CommandBars.FindControl(ID:=189).Execute 'press Break button
DoEvents
下面的按钮应该按下继续按钮,但我无法让它工作-也许有人知道怎么做

Application.VBE.CommandBars.FindControl(ID:=186)
或者,您可以尝试让例程进入睡眠状态,等待IE响应,在这种情况下,您需要公开一些windows API,如下所示

在模块代码的最顶端,您需要放置Declare语句

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
然后你可以在任何地方使用Sleep():

Sub Test()
    Debug.Print "I will now sleep for 1000 milliseconds...."
    Sleep(1000)
    Debug.Print "I am now awake."
End Sub

我觉得这不是个好主意。下一步你试过错误简历了吗?我已经发布了一个答案,但我不确定它对你有多大帮助;这可能会使您找到正确的解决方案。附言:帝国毕业生就在这里;)谢谢@ArmenSafieh Garabedian。好的uni:)您需要以这样一种方式设计代码来更好地处理这个问题。使每个迭代成为函数调用,并添加实际的错误处理(在错误恢复时,下一步不是错误处理)。然后你可以跳过那些“糟糕”的internet explorer调用,避免整个代码被破坏。也可以在这里看到这个函数——它可能非常有用嘿,睡眠的想法听起来是一个有趣的方法。我想我也可以在特定的值上使用这个条件。基本上是随机地减慢过程。但是对于ie的响应,我目前使用'Do DoEvents If Err.Number 0 Then ie.Quit Set ie=Nothing转到_start:End If循环,直到ie.ReadyState=4'对不起,我尝试实现这一点来尝试,但我是将其存储在模块下还是表单下?以及在哪里放置
声明…
行。当我复制粘贴它时,我得到一个错误“只有注释可能出现在结束子、结束函数或结束属性之后”…老实说,我从来没有将IE与VBA一起使用过。如果没有剩下的代码,很难判断你的代码片段是否正常工作,但我想退出IE并在它抛出错误时重新启动它是有意义的。非常感谢,sleep语句现在工作得很好,它减轻了IE对象快速移动的压力。好极了,绝对好极了!谢谢。如果你不使用ie,你会使用哪种浏览器(如果有现成的替代品,我很乐意切换:)很乐意帮助-我以前没有使用过浏览器,但我听说过一种叫做Selenium Wrapper的东西,它让你使用Chrome和FireFox