我已经在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
为什么我不能在课堂内使用班级自己的私人财产?如果它们在内部和外部都不可见,是否可以使用私有属性?
答案 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