我正在使用“工作表抽象\工作表代理”技术开发 Excel VBA 项目,在没有工作表文章和我的问题here中的后续问题中进行了描述。我的 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 annotationRubberduck Opportunity。每当我在“WorksheetProxy”类中声明事件公开工作表(或其他事件公开对象,即命令按钮)时,我都会得到这个。以下代码中的两行都会触发此错误:
' This code sits in my ProcessMasterProxy class
Private WithEvents sheet As Worksheet
Private WithEvents buttonHideOwnerToAvailability As CommandButton
Run Code Online (Sandbox Code Playgroud)
然后,每当我声明一个事件公开“SheetProxy”类的实例或一个事件公开用户表单时,我都会在“Presenter”类中得到相同的错误:
' Here I am declaring an instance of the ProcessMasterProxy class from the above snippet
Private WithEvents assetPrx As ProcessMasterProxy
Private WithEvents view …Run Code Online (Sandbox Code Playgroud) 感谢这个问题:Rubberduck UI子菜单被禁用,我知道我可能必须点击"刷新按钮"才能使用RubberduckVBA.
其中一个可能出现的错误显然是"解析器错误".
可能出现这种解析器错误的不同情况有哪些?
作为Rubberduck和OOP的新手,我仍在学习如何使用该软件并利用编程技术
第一次看到文件夹注释(https://github.com/rubberduck-vba/Rubberduck/wiki/Using-@Folder-Annotations)时,它的工作方式非常直观。
但是随后出现了VB_Attribute注释(https://github.com/rubberduck-vba/Rubberduck/wiki/VB_Attribute-Annotations),我不知道如何使它们工作。
希望这可以节省一些时间以供人们使用该功能
编辑:
为了使属性的需求更具体化,这是克里斯托弗·麦克莱伦(Christopher J. McClellan)发现的一篇很棒的文章
RubberDuck的优点在于,您无需手动执行“导出/编辑/导入”部分,只需单击几下即可完成答案,如下面的答案所述。
我在这个答案中看到,对于Java,您可以在单元测试中将私有方法的可见性设置为"true",以便测试该方法.有没有这样的东西可用于VBA,所以我可以使用RD-VBA对私有方法进行单元测试?
如果没有,并且我有一个类在三个私有方法中计算出一些逻辑并将其返回给返回值,我注定只给出一个输入值并测试返回值,而不能测试三个私有方法在两者之间做升降机吗?
我对Rubberduck 的一个非常限制因素是,仅仅在安装了Rubberduck 的开发PC 上打开VBA 项目就会对其进行修改。即使我没有故意更改任何内容而只是查看它,某些内容也会发生变化,因为 VB 编辑器会询问我是否要将更改保存到它打开的每个项目中。
将此与使用纯文本文件作为源代码的“正常”编程语言进行比较。例如,如果我从某人那里收到一个 .py python 脚本,对其进行编辑以添加一个功能并将其发回,他们永远不会知道,如果我使用记事本、vscode、vim 或其他任何东西来编辑它,对他们来说也没有什么关系
如果我对 VBA 项目做了同样的事情,并且安装了 rubyduck,它会以某种方式更改文件,甚至是我不应该接触的部分代码,这正是我想要避免的。如果可能的话,我想让自己使用Rubberduck 变得不再重要。
我想要实现的是:
关键要求是:
我唯一想到的是将文本复制到另一个项目的各种形式(直接,或导出到文本文件,然后导入或类似),但这听起来有问题:
我确实看到了这个问题,但它涉及专门排除测试模块的代码。就我而言,我想知道是否有一种正确、干净的方法来完全避免 Rubberduck 的所有副作用,而不仅仅是不包含某个模块或代码段。
我有下面的代码来格式化工作表。该工作簿中有多个工作表,因此我只想对第一个工作表执行操作。但是,如果我有除第一个激活之外的任何工作表(例如第二个工作表),则代码会引发 1004 错误。我不知道为什么,因为我正在指定和定义目标工作表。
Option Explicit
Sub SelectByJobNumber()
Dim LastRow As Long
Dim OperatingRow As Variant
Dim CountOfMatching As Long
Dim WB As Worksheet
Set WB = ThisWorkbook.Worksheets(1)
LastRow = WB.Cells(ActiveSheet.Rows.Count, "C").End(xlUp).Row
WB.Range(Cells(LastRow + 2, 19), Cells(LastRow + 2, 22)).Formula = "=" & "Sum(S74:S" & LastRow & ")"
WB.Range(Cells(LastRow + 2, 19), Cells(LastRow + 2, 22)).NumberFormat = "$#,##0.00"
For OperatingRow = 74 To LastRow
If WB.Cells(OperatingRow, 3) = WB.Cells(OperatingRow + 1, 3) Then
CountOfMatching = CountOfMatching + 1
Else
WB.Range(Cells(OperatingRow - …Run Code Online (Sandbox Code Playgroud)