在VBA类中,我们为什么需要使用属性Let
、Get
和Set
,而不能简单地通过子程序或函数传递和返回参数呢?
在VBA类中,我们为什么需要使用属性Let
、Get
和Set
,而不能简单地通过子程序或函数传递和返回参数呢?
对于90%的应用程序,您不需要使用高级VBA技术,标准VBA就可以胜任。使用类,您可以更好地控制代码。
假设您有一个函数Function IsUnique(MyArg as String) as Boolean
,它查找一个名为MyArg
的人员表,并在表中未找到该名称时返回TRUE
。例如,您可以调用此函数并传递用户选择的喜爱蔬菜的字符串。尽管此调用将始终返回TRUE
,但您仍将获得一个语法上正确的程序。
现在假设您有一个包含函数(=属性)Name
和IsUnique()
的类PersonClass
最终您可能想要这样的代码:
Dim MySpouse as PersonClass
Set MySpouse = New PersonClass
MySpouse.Name = "Fanny Hill"
If MySpouse.IsUnique() Then
MySpouse.Insert
End If
属性是用于类的。所以我想你真正的问题更多的是:“为什么要使用类模块?”确实,你可以在很多年里构建出优秀的应用程序而不需要那个需求。
我开始使用它们来处理非常特定的用途,比如读取复杂的文本文件(主机打印报告,逻辑记录跨越几个物理行)或从庞大而复杂的Excel工作表中获取特定信息。
一旦你完成了一个模拟你想要读取的项目的类,你就可以将该类从应用程序重用到应用程序,并集中精力处理你特定应用程序的逻辑,而不是处理同样的旧文件读取逻辑。
> has _return?
|_ yes > has parameter?
| |_ yes: Function
| |_ no > likely verb?
| |_ yes: Function
| |_ no: Get
|_ no > has parameter?
|_ yes > likely verb?
| |_ yes: Sub
| |_ no > uses _object?
| |_ yes: Set
| |_ no: Let
|_ no: Sub
它基于以下假设/定义:
Get
Function
Set/Let
Sub
Get
以查看其外观或Set
/Let
以更改它。例如,Worksheet.Name是内置的Excel属性。像这样Get
属性:Debug.Print ActiveSheet.Name
或者像这样Let
:ActiveSheet.Name = "My Report"
。 - ChrisB