我想知道是否有某种方法可以将自己的方法/属性添加到现有的VBA类(例如 Range , Charts 等)。
一个例子: 我希望当前的VBA类 Worksheet 有自己完成的特定方法,例如:
'Worksheet methods
Public Sub LookFor (ByVal Value as String)
'My code
End Sub
然后我可以从任何声明的Worksheet类调用此函数。
在课程MyClass中:
'MyClass members
Private pWS1 as Worksheet
Private pWS2 as Worksheet
Private pWS3 as Worksheet
'MyClass methods
Private Sub Class_Initialization()
Set pWS1 = Worksheets("WS1")
Set pWS2 = Worksheets("WS2")
Set pWS3 = Worksheets("WS3")
End Sub
Public Sub Example()
pWS1.LookFor("abc")
pWS2.LookFor("123")
pWS3.LookFor("def")
End Sub
谢谢!
答案 0 :(得分:2)
在VBA中没有直接的方法。
你能做的最好就是创造一个"包装"具有私有Worksheet成员的类,并通过Sheet属性公开它。添加您的"扩展程序"类的方法,让它们在m_sheet上运行。
通过创建类的实例并将工作表对象分配给其Sheet属性来初始化类。
您可以拨打"分机号码"直接在对象上的方法,以及您通过Sheet属性访问的任何现有方法。
课程MySheet:
Private m_sht As Worksheet
Public Property Set Sheet(ws As Worksheet)
Set m_sht = ws
End Property
Public Property Get Sheet() As Worksheet
Set Sheet = m_sht
End Property
Public Property Get CountHellos() As Long
CountHellos = Application.CountIf(m_sht.Cells, "Hello")
End Property
测试子:
Sub Tester()
Dim sht As MySheet
Set sht = New MySheet
Set sht.Sheet = ActiveSheet
MsgBox sht.CountHellos '<< "extension" method
MsgBox sht.Sheet.Rows.Count '<< built-in object property
End Sub
编辑:您可以按照Chip在此处列出的步骤,将Sheet属性设置为您的类的默认属性:http://www.cpearson.com/excel/DefaultMember.aspx
可以让你在使用班级实例时跳过Sheet属性(但我还没有对此进行测试)
答案 1 :(得分:-1)
您正在寻找的是传统面向对象编程语言中的“扩展”方法。
请参阅 MSDN :Extension Methods (Visual Basic)
以下是从MSDN源代码在Visual Basic .Net(VB.Net)中执行扩展方法的示例。