Rubberduck VBA:什么可能导致解析器错误?

问题描述 投票:3回答:2

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

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

enter image description here

可能出现这种解析器错误的不同情况有哪些?

vba rubberduck
2个回答
6
投票

TL;DR: Rubberduck is past due for a new "official" release!

免责声明:我管理和贡献Rubberduck OSS项目。

遍历解析树时抛出异常。很难确切地说出发生了什么,因为解析+解析VBA代码是一个very complex, multiple-steps process

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

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

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

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


1
投票

至少有一个案例如下:

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

解:

这个“垃圾”代码可以在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解析并正常解析。

日志:enter image description here ...显示有缺陷的Sub以及我可以在哪个模块中找到它。

来自Rubberduck开发团队的见解:

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

我们实际上尝试编译项目并警告用户项目不能编译。但是,前面提到的VBE设置可能会干扰它。此外,可能会在Rubberduck自己的设置中停用刷新前的编译。

有关详细信息,请参阅此Github thread

© www.soinside.com 2019 - 2024. All rights reserved.