loading...


loading...


公告
loading...

Google 全球搜索 本站搜索
我的分类(专题)
loading...

日志更新
loading...

最新评论
loading...

留言板
loading...

链接

Blog信息
loading...




Google 网上论坛 Beta 版
订阅 excelblogger
电子邮件:
访问此论坛





my e-mail:xhdsxfjy@163.com



如何定义类的默认属性
fanjy 发表于 2008-9-5 13:16:00

在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及以后的版本)

完美Excel整理,同时发表于完美Excel:http://www.excelperfect.com


阅读全文 | 回复(0) | 引用通告 | 编辑
 


发表评论:

    大名:
    密码:
    主页:
    标题:
    loading...


fanjy的博客

Powered by Oblog.