在VBA中,是否有一种方法可以区分类成员和具有相同名称的属性/子/函数参数?例如:
Class1:
Private Name As String
Property Let LastName(Name As String)
this.Name = Name
End Property
Property Get LastName() As String
Dim Name As String
Name = "Mr. "
LastName = Name & this.Name
End Property
在其他语言中,您可以使用关键字this
来引用类/实例(?)成员。但是在VBA中如何解决?我知道您可以使用其他名称。但这不是我想要的。
感谢您的帮助!
答案 0 :(得分:0)
在VBA中,要使用的代替this.
的关键字是Me.
。但是,如果在类内部引用的变量是私有的,则抛出编译错误(我不确定为什么)。可能的解决方法是将其更改为公开。
'''' Class1
Private PrName As String
Public PbName As String
Property Let LastName(Name As String)
Me.PrName = Name ' throws a compile error
Me.PbName = Name ' OK
End Property
更新:
您还可以创建包装函数/属性的附加层-set_name
和getName
。这样,Name
变量就不需要重命名或更改范围了。原始属性的输入参数也保持不变。
Private Name As String
Property Let LastName(Name As String)
Call set_name(Name) ' throws a compile error
End Property
Private Sub set_name(new_name As String)
' wrapper
Name = new_name
End Sub
Property Get getName() As String
' wrapper
getName = Name
End Property
Property Get LastName() As String
Dim Name As String
Name = "Mr. "
LastName = Name & Me.getName
End Property
答案 1 :(得分:0)
您可以使用private-this-as-tsomething
中的Mathieu教过的类型来创建This只需使用vars创建一个Type并将其分配给This。
Private Type TPerson
Name As String
End Type
Private This As TPerson
Property Let LastName(Name As String)
This.Name = Name
End Property
Property Get LastName() As String
Dim Name As String
Name = "Mr. "
LastName = Name & This.Name
End Property
别忘了阅读RubberDuckVBA上的其他文章,因为它们为VBA-OOP提供了许多很好的见识。