【问题标题】:Rubberduck VBA: What can cause a Resolver Error?Rubberduck VBA:什么会导致解析器错误?
【发布时间】:2018-08-29 15:47:40
【问题描述】:

感谢这个问题:Rubberduck UI submenus are disabled,我知道我可能需要点击“刷新按钮”才能使用RubberduckVBA

可能出现的错误之一显然是“解析器错误”。

可能发生此类解析器错误的不同情况有哪些?

【问题讨论】:

  • This 可能会有所帮助。
  • @JohnColeman 文档在这个主题上相当薄。 OP:你用的是什么版本?解析器/解析器最近发生了非常显着的变化。您可以通过单击“关于”对话框中的“版本”框将版本信息复制到剪贴板。
  • @MathieuGuindon 我注意到因此改变了我的评论。
  • @MathieuGuindon 我的版本是 2.2.0.3439-pre。我现在已经安装了 2.2.0.3723-pre,但我仍然遇到同样的错误。版本 2.2.0.3723 操作系统:Microsoft Windows NT 10.0.16299.0,x64 主机产品:Microsoft Office 2016 x64 主机版本:16.0.8730.2175 主机可执行文件:EXCEL.EXE
  • 感谢您的报告!我们有数百个通过解析器和解析器的自动化测试,但很难涵盖所有内容 =)

标签: vba rubberduck


【解决方案1】:

TL;DR:Rubberduck 的新“官方”版本已过期!

免责声明:我管理 Rubberduck OSS 项目并为之做出贡献。

遍历解析树时引发异常。很难说到底发生了什么,因为解析+解析VBA代码是very complex, multiple-steps process

要具体找出问题所在,您需要查看日志 - 默认情况下禁用日志记录(相当冗长),您需要通过 settings 对话框启用它:

最低日志级别设置为 Trace 以获取解析器/解析器正在执行的所有操作的完整细节,或者将 Error 设置为更少仅包含异常信息的详细日志;然后,您可以将此日志(或其中的一部分)发布到new issue,项目开发人员将及时标记/标记它,检查日志/异常详细信息,并确定问题是否在以后的预发布中得到解决构建,或者如果它是需要修复的新错误。

由于几乎每个功能都需要准确理解 VBE 中的代码,因此 Rubberduck 开发人员非常重视解析器/解析器问题。

如果您使用的是最新的“绿色”版本 (v2.2.0),我很确定从那时起问题已得到解决。最新的“预发布”版本在 autocompletion 功能方面存在烦人的问题(肯定会在 v2.3.0 中修复),但解析器现在运行良好 :)

【讨论】:

  • 好的,我要打开一个问题。
【解决方案2】:

至少有以下一种情况:

函数或子程序无法编译,并且开发人员在运行 VBA 项目时不知道这一点,因为从未调用过子程序。

解决方案:

这个“垃圾”代码可以在 Rubberduck 的 Trace-level logs 中发现。

以我为例:

Sub CleanSheetOut()
Worksheets(sheetOut).Range("A1:XFD10485576").Clear
Worksheets(sheetOut).Range("A1:XFD10485576").Interior
        .Pattern = xlNone
       .TintAndShade = 0
     .PatternTintAndShade = 0
End Sub

...不正确(未编译)但从未被调用,因此项目运行良好但 Rubberduck 无法解决。

正确的代码:

Sub CleanSheetOut()
   Worksheets(sheetOut).Range("A1:XFD10485576").Clear
   With Worksheets(sheetOut).Range("A1:XFD10485576").Interior
      .Pattern = xlNone
      .TintAndShade = 0
      .PatternTintAndShade = 0
   End With
End Sub

...编译并让 Rubberduck 正常解析和解析。

日志: ...显示有故障的 Sub 以及我可以在哪个模块中找到它。

来自 Rubberduck 开发团队的见解:

VBE 是否即时编译取决于 工具->选项菜单的编辑器选项卡的右下角。

我们实际上尝试编译项目并警告用户 项目无法编译。但是,上述 VBE 设置可以 干涉那个。此外,刷新前的编译可能是 在 Rubberduck 自己的设置中停用。

查看Github thread了解更多详情。

【讨论】:

  • 你确定这没有被发现?当您单击表示编译错误的 x 时,它会将您带到哪里?
  • 当我说“未发现”时,我的意思是“在运行项目的主子程序时没有被我发现”。我的意思不是“没有被 Rubberduck 发现”。
  • 大声笑。对不起!我的错。
  • 我不是很明确。我更新了我的答案以使其更清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
相关资源
最近更新 更多