4

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

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

在此处输入图像描述

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

4

2 回答 2

6

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

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

遍历解析树时引发异常。很难确切地说出发生了什么,因为解析+解析 VBA 代码是一个非常复杂的多步骤过程

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

橡皮鸭设置对话框

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

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

如果您使用的是最新的“绿色”版本(v2.2.0),我很确定问题从那时起就得到了解决。最新的“预发布”版本在自动完成功能方面存在烦人的问题(肯定会由 v2.3.0 修复),但解析器现在工作得很好:)

于 2018-08-29T16:12:24.667 回答
1

至少一种情况如下:

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

解决方案:

这个“垃圾”代码可以在Rubberduck的跟踪级别日志中发现。

以我为例:

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 是否即时编译取决于 Tools->Options 菜单的 Editor 选项卡右下方的编译设置。

我们实际上尝试编译该项目并警告用户该项目没有编译。但是,前面提到的 VBE 设置可能会干扰这一点。此外,在 Rubberduck 自己的设置中,刷新前的编译可能会被禁用。

有关更多详细信息,请参阅此Github 线程

于 2018-08-31T08:08:11.350 回答