如何定义类的默认属性

在Excel中,许多对象都有一个默认的属性。如果在使用某对象时,没有专门指定属性,则会使用该对象的默认属性。例如,Range对象的Value属性是其默认属性,因此下列两行代码作用相同:
Range(“A1”).Value=123
Range(“A1”)=123
然而,VBA并没有提供一种简单的机制用于为类指定默认属性,但是确实可以指定默认的属性,只不过需要“费一些周折”。
假设有一个名为CMyClass的类,其代码如下:
Option Explicit

Private pValue As Long
Private pName As String

Property Get Value() As Long
Value = pValue
End Property
Property Let Value(V As Long)
pValue = V
End Property

Property Get Name() As String
Name = pName
End Property
Property Let Name(V As String)
pName = V
End Property

如果没有指定默认属性,下面的测试将失败,导致运行时错误438——对象不支持该属性或方法。
Sub test()
Dim MyClass As CMyClass
Set MyClass = New CMyClass
MyClass = 123
End Sub

要使Value属性为默认属性,可按下列步骤进行。
步骤1:保存工作簿。
步骤2:在VBE编辑器中打开CMyClass模块。
步骤3:单击“文件——移除CMyClass”。
步骤4:当出现“在移除CMyClass之前是否将其导出”的信息提示框时,选择“是”,保存该模块。
步骤5:在记事本或者其它文本编辑器中打开刚导出的文件CMyClass.cls。
步骤6:找到Property Get Value()过程,并在第一行添加下列语句:
Attribute Value.VB_UserMemId=0
此时,该过程的完整代码如下(其中,加粗部分为刚添加的语句):
Property Get Value() As Long
Attribute Value.VB_UserMemId=0
Value = pValue
End Property
步骤7:在记事本中保存该文件然后关闭。
步骤8:在VBE中,选择“文件——导入文件”,将刚才修改的文件导入。
注意,在VBE编辑器中看不到“Attribute”语句,它会读取并处理Attribute语句但是不会显示它们,也不会允许在编辑器中输入。
现在,在标准模块中运行下列代码:
Sub test()
Dim MyClass As CMyClass
Set MyClass = New CMyClass
MyClass = 123
Debug.Print MyClass
End Sub

运行正常。因为在Property Get过程中添加了Attribute语句后,编译器就会将其当作默认属性。
(上述内容适合于Excel 2000及以后的版本)


提示:您可以在评论中使用HTML标签,且任何与HTML标签相同的符号都会被理解为HTML标签并以相应的格式显示.如果您的评论中有代码,可以使用相应的标签,例如,如果有VB或VBA代码,则可以使用[vb]标签,即[vb]放置的代码[/vb],这样会很清晰地显示代码.

留下回复