我在VBA中有一个函数,它是更大设置的一部分。该函数驻留在Class Module
内,基本上只是一个美化的减法。我想知道为什么我得到了一些奇怪的结果,所以为了调试目的我(过)简化了函数。事实证明,其中一个变量没有被赋予它应该的值,而是一些看似随机的值。一个简单的分配怎么会出错?VBA将不正确的值赋给变量
甚至更怪,为什么它并不总是分配不正确的值?它只是有时会发生。其他时间是正确的。偶尔,似乎根本没有任何评估,而函数只返回0(零)。
从所有我可以看到它不能成为我的代码的问题,但与VBA的工作方式(幕后)rahter。但只要我不明白,就很难减轻。
代码:
Public Property Get MySubtractionFunction() As Double
Dim tmpValue1 As Double
Dim tmpValue2 As Double
Dim tmpOutput As Double
'When debugging, sometimes CDbl(Me.Value2) evaluates to approximately 18.000
'However tmpValue2 evaluates to approximately 10.000
tmpValue1 = CDbl(Me.Value1)
tmpValue2 = CDbl(Me.Value2)
tmpOutput = tmpValue1 - tmpValue2 'Breakpoint is set at this line
tmpOutput = Application.WorksheetFunction.Min(tmpOutput , tmpValue1)
'Return output
MySubtractionFunction= tmpOutput
End Property
更新1 当我到达断点前将鼠标悬停Me.Value2
,它实际上表明,被分配到tmpValue2
值。如果我然后删除鼠标,并再次将鼠标悬停在Me.Value2
上,则会显示不同的值。一个属性值如何才能改变,没有任何代码被执行?
更新2 也许我应该提到,只有当我在循环中使用类对象时才会出现问题。它被这样调用:
For i = 1 To 1000
Dim myObject As myClass
Set myObject = New myClass
'Some initialization
result = myObject.MySubtractionFunction
'A bunch of other stuff
Set myObject = Nothing
Next i
'Me.Value1'和'Me.Value2'是什么类型?他们是'String'类型的吗?如果是这样,在转换为Double之前它们的实际值是多少? – user3598756
这两个属性都是“Double”类型。我只是将'CDbl'添加为调试尝试,这不是必需的。 – Noceo
看来你正在计算时间值。这些值因转换不正确而臭名昭着。看看“01:10:15”这样的值如何在用户表单中以Dbl结尾。 – Variatus