我正在使用“工作表抽象\工作表代理”技术开发一个 Excel VBA 项目,在没有工作表文章和我的问题中的后续问题中进行了描述。我的 VBA 代码采用 MVP 设计模式构建,并且我编写了尽可能多的 OOP 代码。Rubberduck 的“代码检查”功能在此过程中提供了很大的帮助,但是在最近的版本中(我认为自 v2.4.1.4*** 起,但不能完全确定确切的版本)我开始一直得到一些我不太明白的“Rubberduck Opportunities”和“Code Quality Issues”警告。
如标题所述,第一个是Member 'x' has a 'VB_VarHelpID' attribute with value '-1', but no corresponding annotation
Rubberduck 机会。每当我在“WorksheetProxy”类中声明一个事件公开工作表(或其他事件公开对象,即命令按钮)时,我都会得到这个。以下代码中的两行都会触发此错误:
' This code sits in my ProcessMasterProxy class
Private WithEvents sheet As Worksheet
Private WithEvents buttonHideOwnerToAvailability As CommandButton
然后,每当我声明暴露事件的“SheetProxy”类的实例或暴露事件的 UserForm 时,我都会在“Presenter”类中得到相同的错误:
' Here I am declaring an instance of the ProcessMasterProxy class from the above snippet
Private WithEvents assetPrx As ProcessMasterProxy
Private WithEvents view As ChecklistPopup
Rubberduck 的代码检查为此类错误提供了两种操作:1.“添加属性注释”'@MemberAttribute VB_VarHelpID, -1
在声明上方插入行和 2.“删除属性”似乎什么都不做,单击后错误仍然存在。
我想知道“添加属性注释”修复对我的 VBA 项目有什么影响,以及我是否应该应用它,或者更确切地说要更改我的代码中的某些内容以避免完全出错。
同样,我担心我在“代码质量问题”部分中遇到的一个相关错误:To the variable 'sheet' of declared type 'EXCEL.EXE:Excel.Worksheet' a value is set assigned with the incompatible declared type 'ProcessMgmt.ProcessMaster'
这与上面第一个片段中的“ProcessMasterProxy”类中的以下代码有关:
Private WithEvents sheet As Worksheet
Private WithEvents buttonHideOwnerToAvailability As CommandButton
Private Sub Class_Initialize()
***Set sheet = ProcessMaster***
Set buttonHideOwnerToAvailability = ProcessMaster.btnHideAssetOwnerToAvailability
End Sub
其中“ProcessMaster”是实际 Excel 工作表的名称,上述代码位于其相应的“SheetProxy”类中。
Code Inspections 针对此错误提供的唯一选项是“忽略一次”,我想知道这样做是否安全。我之前在几个项目中出现过这个错误,但那里一切正常。但是,在我最近的项目中,我在打开工作簿时开始随机收到“运行时错误 35010”,其中我的 Workbook_Open 事件中有以下代码:
Private pres As Presenter
If pres Is Nothing Then
Set pres = New Presenter
End If
此问题是否与上述两个代码检查建议/错误中的任何一个有关?