我刚刚开始围绕在VBA类模块中构建类。到目前为止,它已经相当顺利,但我遇到了一个很小的挑战,如果我在模块中创建一个传统函数,这个问题很容易解决:如何将一个可选的布尔默认值设置为True?
在函数或子函数中,我只需通过隐式声明在属性列表中解决这个问题:
Function SomeFunction(Optional bValue = True) as Variant
...
End Function
在使用Let和Get属性的类模块中,由于VBA默认声明布尔变量为false,因此我还没有找到解决方法。所以我有,例如:
Private bValue as Boolean
Public Property Let TrueOrFalse(myBoolProperty As Boolean)
bValue = myBoolProperty
End Property
Private Property Get TrueOrFalse() As Boolean
TrueOrFalse = bValue
End Property
Function SomeFunction() As Boolean
SomeFunction = TrueOrFalse
End Function
请记住,我还在学习,所以即使是这个简单的代码也可能对训练有素的眼睛不敏感,但问题仍然存在:如果我只想将它作为Optional属性使用,我如何将bValue默认为True?
希望这有点道理..
感谢您阅读!
答案 0 :(得分:6)
Class_Initialize方法允许您设置默认值。
我设置了我的属性:
Option Explicit
Dim pTrueOrFalse as Boolean
'## This method will be invoked whenever you create a class object using the NEW keyword/etc.
Private Sub Class_Initialize()
pTrueOrFalse = True
End Sub
'## Property "Get" method, which returns the value when called
Public Property Get TrueOrFalse() As Boolean
TrueOrFalse = pTrueOrFalse
End Property
'## Property "Let" method, which assigns the value when called
Public Property Let TrueOrFalse(lTrueOrFalse as Boolean)
pTrueOrFalse = lTrueOrFalse
End Property
在常规代码中使用这些内容时,您可以执行以下操作:
Dim myClassObject as New [class object name] 'this will invoke the Initialize procedure
MsgBox myClassObject.TrueOrFalse 'this will call upon the "Get" method
myClassObject.TrueOrFalse = False 'This will call upon the "Let" method
MsgBox myClassObject.TrueOrFalse