VBA类/对象

时间:2017-08-08 13:12:09

标签: vba class

尽管是一位经验丰富的VBA程序员,但这是我第一次创建自己的类(对象)。我很惊讶地看到所有属性都在“本地窗口”中“重复”。小例子(在'End Sub'处断开):

' Class module:
Private pName As String

Public Property Let Name(inValue As String)
    pName = inValue
End Property
Public Property Get Name() As String
    Name = pName
End Property

' Normal module:
Sub Test()
    Dim objTest As cTest
    Set objTest = New cTest
    objTest.Name = "John Doe"
End Sub

为什么Name和pName都显示在Locals窗口中?我能以某种方式摆脱pName吗?

祝你好运, 黑尔格

2 个答案:

答案 0 :(得分:11)

作为评论&答案已经说过,这只是VBE的帮助。

但是,如果你发现在 locals 工具窗口中列出私人字段和公共成员会很吵,那么就可以很好地清理它 - 这里我放了{{1} } Test内的程序,并留下名为ThisWorkbook的类:

clean locals toolwindow

那么这里发生了什么?什么' Class1

此处this

Class1

该类只有一个私有字段,一个名为Option Explicit Private Type TClass1 Name As String '...other members... End Type Private this As TClass1 Public Property Get Name() As String Name = this.Name End Property Public Property Let Name(ByVal value As String) this.Name = value End Property 的用户定义类型值,它包含所有封装的数据成员。

因此,物业'基本字段被有效隐藏,或者更确切地说,它们都在this下重新分组,因此除非您想要查看它们,否则您将无法看到基础字段值:

locals toolwindow, 'this' field expanded

另外一个好处是,你不再需要任何伪匈牙利语前缀,属性'实现非常清晰,并且所有属性中最好的都具有与其后备字段完全相同的标识符名称。

答案 1 :(得分:6)

所有检查窗口不仅显示对象的公共接口,还显示其私有成员。 AFAIK你无能为力。

在调试时获得更多洞察力时,请考虑这是一个很好的功能。

根据我的经验,这在现实世界对象中不是一个问题,因为它们往往具有更多的字段和属性。假设一致的命名(如您的示例所示),字段和属性很好地组合在一起。