感谢这个问题:Rubberduck UI submenus are disabled,我知道我可能必须点击“刷新按钮”才能使用RubberduckVBA。
可能出现的错误之一显然是“解析器错误”。
可能发生此类解析器错误的不同情况有哪些?
感谢这个问题:Rubberduck UI submenus are disabled,我知道我可能必须点击“刷新按钮”才能使用RubberduckVBA。
可能出现的错误之一显然是“解析器错误”。
可能发生此类解析器错误的不同情况有哪些?
免责声明:我管理并为 Rubberduck OSS 项目做出贡献。
遍历解析树时引发异常。很难确切地说出发生了什么,因为解析+解析 VBA 代码是一个非常复杂的多步骤过程。
要具体找出问题所在,您需要查看日志 - 默认情况下禁用日志记录(相当冗长),您需要通过设置对话框启用它:
将最低日志级别设置为Trace以获取解析器/解析器正在执行的所有操作的完整详细信息,或者将错误设置为仅包含异常信息的不太详细的日志;然后,您可以将此日志(或其中的一部分)发布到新问题中,项目开发人员将及时标记/标记它,检查日志/异常详细信息,并确定问题是否在以后的预发布版本中得到修复,或者如果它是需要修复的新错误。
由于几乎每个功能都需要准确理解 VBE 中的代码,因此 Rubberduck 开发人员非常重视解析器/解析器问题。
如果您使用的是最新的“绿色”版本(v2.2.0),我很确定问题从那时起就得到了解决。最新的“预发布”版本在自动完成功能方面存在烦人的问题(肯定会由 v2.3.0 修复),但解析器现在工作得很好:)
至少一种情况如下:
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 线程。