区分类成员和VBA中具有相同名称的参数?

时间:2019-03-09 23:11:38

标签: vba class parameters arguments member

在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中如何解决?我知道您可以使用其他名称。但这不是我想要的。

感谢您的帮助!

2 个答案:

答案 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_namegetName。这样,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提供了许多很好的见识。