Excel 修改现有的VBA类
我想知道是否有办法将您自己的方法/属性添加到现有的VBA类(如范围、图表等) 例如: 我希望当前的VBA类工作表有一个自己完成的特定方法,例如:Excel 修改现有的VBA类,excel,vba,class,Excel,Vba,Class,我想知道是否有办法将您自己的方法/属性添加到现有的VBA类(如范围、图表等) 例如: 我希望当前的VBA类工作表有一个自己完成的特定方法,例如: 'Worksheet methods Public Sub LookFor (ByVal Value as String) 'My code End Sub 然后我可以从任何声明的工作表类调用此函数 在MyClass类中: 'MyClass members Private pWS1 as Worksheet Private pWS2 as W
'Worksheet methods
Public Sub LookFor (ByVal Value as String)
'My code
End Sub
然后我可以从任何声明的工作表类调用此函数
在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
谢谢 在传统的面向对象编程语言中,您所寻找的方法被称为“扩展” 请参见MSDN: 您好,传统的Visual Basic for Applications(VBA)不支持/不提供您要查找的内容。 下面是一个从MSDN源代码在Visual Basic.Net(VB.Net)中执行扩展方法的示例 第一步。像这样声明扩展方法。。。 第二步。像这样调用扩展方法。。。
在VBA中没有直接的方法来实现这一点 您所能做的最好的事情是创建一个具有私有工作表成员的“包装器”类,并通过一个Sheet属性公开它。将“扩展”方法添加到类中,并让它们在m_工作表上操作 通过创建类的实例并将工作表对象指定给其工作表属性来初始化类 您可以直接在对象上调用“扩展”方法,以及通过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
子测试仪()
我的单子一样暗
Set sht=新的MySheet
设置sht.SHET=ActiveSheet
亲爱的蒂姆,谢谢你的快速回复。我已经考虑过了。但这种方法唯一重要的一点是,如果我需要声明具有不同名称和用途(而不是数组)的类工作表的多个项,那么我假设为每个项编写相同的代码会很麻烦。最后,因为每个项目都有不同的目的,但它们都有一个共同的功能(我想要实现的功能)。。。我将继续寻找更多的方法来实现这一点……如果您创建一个“工厂”函数来返回类的初始化实例,那么就没有比使用常规工作表对象更多的代码(作为代码行)。这是VBA中唯一可用的方法。