【问题标题】:How to break and restart code execution automatically in VBA? Error-Handling如何在 VBA 中自动中断和重新启动代码执行?错误处理
【发布时间】:2014-07-17 09:27:16
【问题描述】:

我编写了一个代码来从 VBA 中的 Google 专利中抓取网络信息,该代码运行良好,但不幸的是它很容易出现两个错误。

最常见的两个是

  • 运行时错误
  • Windows OLE 正在等待...

发生这种情况时,只需按下 ok、ctrl break、F5 并再次执行即可。同样由于我不知道的原因,代码在 x 分钟后似乎变慢了,然后中断并重新启动它会加快速度。

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

If Range("A1".End(xlDown)) at time t = Range("A1".End(xlDown)) at time t + 600 Then restart code execution Else continue code execution

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

【问题讨论】:

  • 这对我来说听起来不是一个好主意。您是否尝试过 On Error Resume Next?
  • 我已经发布了一个答案,但我不确定它对你有多大帮助;它可能会让您走上解决方案的正确轨道。 PS:帝国毕业生就在这里;)
  • 感谢@ArmenSafieh-Garabedian。好的大学肯定:)
  • 您需要以更好地处理此问题的方式设计您的代码。使每次迭代都成为函数调用并添加实际的错误处理(在错误恢复下一个不是错误处理)。然后,您可以简单地跳过“糟糕”的 Internet Explorer 调用并避免整个代码破坏。
  • 在这里也可以看到这个功能 - stackoverflow.com/a/21338071/1048539 - 它可能会很有帮助

标签: vba excel error-handling runtime-error


【解决方案1】:

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

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

【讨论】:

  • 嘿,睡眠的想法听起来很有趣。我想我也可以在特定值上使用该条件。基本上随机减慢这个过程。但是为了让ie响应,我目前使用`Do DoEvents If Err.Number 0 Then ie.Quit Set ie = Nothing GoTo the_start: End If Loop until ie.ReadyState = 4'
  • 抱歉,我正在尝试实现这个来尝试一下,但我是把它存储在模块下还是表单下?以及在哪里放置Declare... 行。当我复制粘贴它时,我收到一个错误“只有 cmets 可能出现在 End Sub、End Function 或 End Property 之后”...
  • 老实说我从来没有用过 IE 和 VBA。如果没有其余代码,很难判断您的 sn-p 是否正常工作,但我猜想退出 IE 并在抛出错误时重新启动它是有道理的。
  • 非常感谢,sleep 语句现在可以完美运行,它减轻了 ie 对象的压力,使其尽快移动。太棒了,绝对棒!非常感谢。如果您不使用 ie,您使用哪个浏览器(如果有现成的替代品,我会很乐意切换 :)
  • 很高兴为您提供帮助 - 我以前没有使用过浏览器,但我听说过一种叫做 Selenium Wrapper 的东西,它可以让您使用 Chrome 和 FireFox
猜你喜欢
  • 2018-06-18
  • 2019-01-07
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 2014-07-09
相关资源
最近更新 更多