【问题标题】:How to debug runtime syntax error in Excel VBA?如何在 Excel VBA 中调试运行时语法错误?
【发布时间】:2011-12-19 05:06:29
【问题描述】:

我有一个 Excel VBA 项目,它使用 MSXML2.XMLHTTP 将 Web 内容导入 Excel。一切都执行得很好,除了有时我在脚本运行时遇到这个错误:

无论我单击哪个按钮(是或否),脚本都会继续正常运行并且一切正常(即,所有内容都正确加载到 Excel 中)。但是,我想首先防止出现此错误,因为在宏运行时弹出此错误是不好的用户体验。

VBA 项目甚至没有 344 行,所以我不确定错误指的是哪一行。有没有人知道我该如何解决这个问题,或者至少阻止这个错误对话框出现?

【问题讨论】:

  • 您能否展示执行获取 Web 内容并将其放入 Excel 的代码?网络内容中是否可能发生错误?
  • @TimWilliams 您可能是对的,它来自网络,因为它看起来不像 VBA 错误消息。不幸的是我不能在这里展示代码,因为它很长很复杂,但核心思想来自这篇文章:tushar-mehta.com/publish_train/xl_vba_cases/…(XMLHttp 部分)。
  • @TimWilliams XMLHttp 抓取代码看起来很可靠——当我一次获取大约 10 页时一切正常。当我在一个循环中获取大约 500 个页面(一次最多打开 10 个连接)时,运行时错误才会抬起头来。
  • 很难在没有看到任何代码的情况下添加任何其他内容。如果错误来自网络内容,我会感到惊讶,因为我不认为 xmlhttp 运行和脚本......
  • 您可以尝试进入您的 IE 设置并确保启用脚本调试:这至少可以让您了解错误的来源。

标签: excel vba


【解决方案1】:

手动一次抓取10页后,终于到了第416页有问题的页面。事实证明,我的 436 个页面列表中的这一页返回了格式错误的 XMLHttpReq.responseText,因此这一行触发了该特定页面的运行时错误:

HTMLDoc.body.innerHTML = XMLHttpReq.responseText

为了解决这个问题,我必须将 XMLHttpReq.responseText 保存到一个变量中,修改源代码使其成为有效的 HTML,然后将其分配给 HTMLDoc。

感谢所有花时间回复的人。

【讨论】:

    【解决方案2】:

    您可以在可能导致此错误的行之前使用on error resume next,然后在您完成之后使用on error goto 0?这要求您确定对该 XMLHTTP 的哪个调用可能会导致问题,我不知道,哪个 debug.print 无处不在,看看哪一行可能会出现问题?

    我准备投反对票:p

    【讨论】:

    • 问题是我无法确定错误的来源。它看起来不像 VBA 错误;它看起来更像是源自 MSXML2.XMLHTTP 的 IE 控件错误。
    • 我从您的评论中看到,MSXML2.XMLHTTP 要么有错误,要么您正在传递函数不期望的值。因此,如果您仅从 VBA 调用此函数一次,则使用两个 on error 语句将该函数夹在中间。这就像捕获异常并在其他语言中默默地忽略它。我说撒上 debug.print 的原因是你可能会在很多地方使用这个库,但不确定你的代码的哪一行可能会导致问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多