【发布时间】:2017-08-25 21:48:14
【问题描述】:
我对 VBA 类中的私有属性有什么误解?作为一个新手,我希望私有属性可以被同一类(模块)中的其他方法访问,但在尝试编译时却得到“找不到方法或数据成员”。
打破作为私有财产让 lngMarketID
这是我的标准模块中的内容:
Option Explicit
Public Model As classModel
Set Model = New classModel
Model.Setup
使用这个名为 classModel 的类模块:
Option Explicit
Private plngMarketID As Long
'plngMarketID Properties
Public Property Get lngMarketID() As Long
lngMarketID = plngMarketID
End Property
Private Property Let lngMarketID(ByVal lngMarketID As Long)
plngMarketID = lngMarketID
End Property
Public Sub Setup()
SetuplngMarketID
End Sub
Private Sub SetuplngMarketID()
Model.lngMarketID = CLng(DefaultLogicOptions.textboxMarketID.Value)
End Sub
作为公共属性让 lngMarketID
“找不到方法或数据成员”突出显示SetuplngMarketID 中行的.lngMarketID。当我将 Private Property Let lngMarketID 更改为 Public Property Let lngMarketID 时,这编译得很好。
【问题讨论】:
-
上面的代码是一个基本的编程错误,但是导致同样错误“未找到”的更频繁的错误是在类中使用
me来访问一个 private 成员 -> 参见 Why can't the VBA Me keyword access private procedures in its own module? 中的解释和解决方案(无论是私有过程、函数、属性、事件,当它与Me一起使用时)