为什么我的函数名称在“locals”窗口中出现两次?

时间:2012-02-05 02:04:09

标签: vba excel-vba excel

我创建了一个类模块,我在其中定义了一个函数。无论何时调用该函数,它都会在本地窗口中列出两次。只有第二个值的值发生变化,第一个值保持为空或“零”,具体取决于其类型,直到代码执行结束。我对标准模块中定义的函数没有这个问题。我做错了什么,这是一个错误,还是背后的逻辑原因?

TestClass类模块的内容:

Public Value As Double

Function AddFive() As Double
    AddFive = Me.Value + 5
End Function

标准模块的内容:

Sub TestSub()
    Dim TestObject As New TestClass
    TestObject.Value = 2
    MsgBox TestObject.AddFive
End Sub

这是一个屏幕截图,显示当代码逐行执行时,函数的值在locals窗口中列出两次,并且在执行函数代码后只有第二个值发生了变化。

(link to screenshot)

我正在使用VBA for Excel 2010。

提前致谢。

1 个答案:

答案 0 :(得分:0)

问题更多的是你如何做到这一点。如果你有一个只为类对象的内部变量添加5的函数,那么它在技术上是一个void(VBA中的Sub),因为你不需要返回值。

您的代码应为:

CLASS

Public Value As Double

Sub AddFive()
    Me.Value = Me.Value + 5
End Sub

MODULE

Sub test()

Dim testObject As New TestClass
testObject.Value = 2
testObject.AddFive

MsgBox testObject.Value

End Sub

我可以想象为什么创建了2个变量可能有很多原因,但我发现因为你做了不正确的代码而进入为什么会出现意外行为有点无意义。

如果你愿意,你甚至可以编写类函数,在msgbox中显示它的值+ 5,这也不会产生额外的变量。但这很奇怪,我想你想要上面的代码。但这里无论如何:

CLASS

Public Value As Double

Sub ShowPlusFive()
    MsgBox Me.Value + 5
End Sub

MODULE

Sub test()

Dim testObject As New TestClass
testObject.Value = 2

testObject.ShowPlusFive

End Sub