Private Let / Public Get - 让我们不要在课堂上看到

时间:2014-04-23 09:46:02

标签: vba

我已经在VBA中编写了一个类,其成员和属性设置如下:

Private mSomeVar As String

Public Property Get SomeVar() As String
    '...
End Property

Private Property Let SomeVar(value As String)
    '...
End Property

这似乎是非常标准的做法 - 带有私有Let函数的只读属性,所以类本身可以修改值,我可以在属性体中应用一些逻辑(验证等),同时防止外部任何事情改变它的阶级。

问题是,当我尝试在类中使用的私有属性时,VBE告诉我无法找到它:

Private Sub SomeInternalMethod()
    'Compile error: Method or data member not found
    Me.SomeVar = "new value" 
End Sub

为什么我不能在课堂内使用班级自己的私人财产?如果它们在内部和外部都不可见,是否可以使用私有属性?

2 个答案:

答案 0 :(得分:1)

在相关问题中找到问题。 VBA中的Me关键字仅公开类的Public接口,而不是Private。这看起来真的很讨厌,但可以通过删除Me关键字解决问题(虽然我可能不得不处理阴影,其中一个方法采用与属性同名的参数。更多不必要的匈牙利表示法?是的!)

Why do calls to Class Module Private Subs fail when using `Me`?

Why can't the VBA Me keyword access private procedures in its own module?

答案 1 :(得分:0)

只是不要使用Me对象

Private Sub SomeInternalMethod()
    SomeVar = "new value" 
End Sub