VBA类模块 - 设置默认值

时间:2014-07-17 23:56:40

标签: vba excel-vba excel

我刚刚开始围绕在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?

希望这有点道理..

感谢您阅读!

1 个答案:

答案 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