【问题标题】:Class Method Can't Use Private Property of Same Class?类方法不能使用同一个类的私有属性?
【发布时间】: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 时,这编译得很好。

【问题讨论】:

标签: vba excel


【解决方案1】:

它是该行中的“模型”。 Model 是一个全局变量,指向你的类的某个特定实例。从那个对象,只有公共的东西是可见的。

您想从您的类的任意实例“内部”引用它,所以只需删除 Model 前缀:

Private Sub SetuplngMarketID()

    lngMarketID = CLng(DefaultLogicOptions.textboxMarketID.Value)

End Sub

【讨论】:

    【解决方案2】:

    您正在调用“Model.lngMarketId”,Model 是您的 classModel 对象变量的名称,在它自身的对象中不可见。

    你必须使用“lngMarketId = Clng(something)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 2018-11-08
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多