感谢这个问题:Rubberduck UI submenus are disabled,我知道我可能必须点击“刷新按钮”才能使用RubberduckVBA。
可能发生的错误之一显然是“解析器错误”。
在哪种情况下,可能会发生此类解析器错误?
答案 0 :(得分:6)
免责声明:我负责管理Rubberduck OSS项目。
遍历解析树时引发了异常。很难准确说明发生了什么,因为解析+解析VBA代码是very complex, multiple-steps process。
要具体找出出了什么问题,您需要查看日志-默认情况下日志记录处于禁用状态(相当冗长),您需要通过设置对话框将其启用:
将最低日志级别设置为跟踪,以获取解析器/解析器正在执行的所有操作的详细信息,或者将错误减少为仅包含异常信息的详细日志;然后,您可以将此日志(或日志的一部分)发布到new issue中,项目开发人员将立即对其进行相应的标记/标签,检查日志/异常详细信息,并确定问题是否在以后的版本中得到了解决。 -release版本,或者是需要修复的新错误。
由于几乎每个功能都需要准确了解VBE中的代码,因此Rubberduck开发人员非常重视解析器/解析器问题。
如果您使用的是最新的“绿色”版本(v2.2.0),那么我很确定此后该问题已解决。最新的“预发行”版本具有 autocompletion 功能的烦人问题(肯定会在v2.3.0中修复),但是解析器现在可以很好地工作了:)
答案 1 :(得分:1)
以下至少一种情况:
函数或Sub无法编译,并且在运行VBA项目时开发人员无法意识到这一点,因为从未调用Sub。
解决方案:
此“垃圾”代码可以在Rubberduck的Trace-level logs中发现。
以我的情况为例:
UPDATE [fcgen].[RPD1yeardata]
SET [TotOP] = [1]+[2]+[3]+[4]+[5]+[6]+[7]+[8]+[9]+[10]+[11]+[12]+[13]+[14]+[39]+[40]+[41]+[42]+[43]+[44]+[45]+[46]+[47]+[48],
[TotPK] = [15]+[16]+[17]+[18]+[19]+[20]+[21]+[22]+[23]+[24]+[25]+[26]+[27]+[28]+[29]+[30]+[31]+[32]+[33]+[34]+[35]+[36]+[37]+[38]
FROM [fcgen].[RPD1yeardata]
...是不正确的(未编译),但从未被调用,因此项目运行正常,但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,我可以在哪个模块中找到它。
Rubberduck开发团队的见解:
VBE是否即时编译取决于以下项目中的编译设置 在“工具”->“选项”菜单的“编辑器”选项卡的右下角。
我们实际上试图编译项目并警告用户 项目无法编译。但是,上述VBE设置可以 干扰。此外,刷新之前的编译可能是 在Rubberduck自己的设置中停用。
有关更多详细信息,请参见此Github thread。