在VBA中判别double值是否为0,加倍是0

祝大家好日子。

我有一个关于VBA的小问题,以及variables初始化:

我有一个class,有财产

Public myVal As Double 

这两个脚本:

 Dim myObject As new MyClass myObject.myClass = 0 Debug.Print myObject.myClass Dim myObject As new MyClass Debug.Print myObject.myClass 

给出相同的输出:0。

有没有办法告诉两个零(值已分配为0 – 没有分配的值,所以输出为0默认情况下)分开?

旁边的问题:如果我宣布为

 Public myVal As Variant 

我没有问题,因为我可以使用IsEmpty(myClass.myVal)。

由于人们通常喜欢使用Double over Variant,所以我认为它有一个缺点。 它是什么?

谢谢你的帮助 :)

马克西姆

这个缺点与把variables变成DoubleVariant无关。 这与揭露你的class级的胆量与任何想要在他们周围肆虐的东西有关。

我build议创build实际的属性,并使用这些来报告你的对象的状态。 这条线…

 Public myVal As Double 

…不会使myVal成为该类的一个属性。 它给它一个公共的内部成员variables,并打破封装 。 使它成为一个实际的属性。 这样,你可以有其他的属性来报告对象的状态,如果需要的话:

MyClass.cls:

 Option Explicit Private mInit As Boolean Private mVal As Double Public Property Get DoubleValue() As Double DoubleValue = mVal End Property Public Property Let DoubleValue(inValue As Double) mInit = True mVal = inValue End Property Public Property Get Initialized() As Boolean Initialized = mInit End Property 

调用代码:

 Dim myObject As New MyClass myObject.DoubleValue = 0 Debug.Print myObject.DoubleValue '0 Debug.Print myObject.Initialized 'True Dim myOtherObject As New MyClass Debug.Print myOtherObject.DoubleValue '0 Debug.Print myOtherObject.Initialized 'False