访问类模块中的私有字段
我有这个简化的类模块clXXX ….
':: backing field Private fTemplateBk As Excel.Workbook '::::::::::::::::::::::::::: ':: ':: constructor Private Sub Class_Initialize() End Sub '::::::::::::::::::::::::::: ':: ':: properties Property Get TemplateBk() 'As Excel.Workbook '<< different error messages depending on if "As Excel.Workbook" is included or not TemplateBk = fTemplateBk End Property '::::::::::::::::::::::::::: ':: ':: methods Public Sub openTemplate() Set fTemplateBk = Excel.Workbooks.Open("\\xxx\yyy\zzz.xlsx") End Sub Public Sub someMethod() Me.TemplateBk.Sheets(1).Activate End Sub
正常模块:
Sub control() Dim x As clXXX Set x = New clXXX x.openTemplate x.someMethod '<<<<<<errors here End Sub
我只想通过只读属性TemplateBk
使用代码(如me.TemplateBk. ...
访问专用字段me.TemplateBk. ...
me.TemplateBk. ...
我如何修改上述所以这是可能的?
您需要公开该属性,并且必须使用Set关键字。
检查下面的代码,并确认它是否工作:
Private fTemplateBk As Excel.Workbook Public Property Get TemplateBk() As Excel.Workbook Set TemplateBk = fTemplateBk End Property
你的someMethod应该使用私人领域fTemplateBk,因为它是从外部私人,而不是从内部。
Public Sub someMethod() Me.fTemplateBk.Sheets(1).Activate End Sub
如果你需要从外面使用这个属性,在你的正常模块中,你应该使用:
Sub control() Dim x As clXXX Set x = New clXXX x.openTemplate x.TemplateBk.Sheets(1).Activate End Sub
更新1
如果你想保持你的代码,只需在你的TemplateBk getter中添加SET,代码就可以工作。 正如你在图片中看到的,我使用了与这个改变相同的代码,并且它可以工作。
Property Get TemplateBk() 'As Excel.Workbook Set TemplateBk = fTemplateBk 'add the SET at the beggining End Property