静态“function”在VBA / Excel中?

我只是有一个关于vba的简单问题。

我知道vba中的一个静态variables保持其以前的值,而不是每次调用函数时重置它。 但是,我想知道如何能有一个“静态函数”,而不是一个variables。 让我用一个简单的代码来澄清这一点:

Function Alt(Soc1 As Double) Static D As Integer If Soc1 >= 40 Then Alt = 0 ElseIf Soc1 <= 30 Then Alt = 1 End If End Function 

在这里,我希望可变函数Alt保持其以前的值,以便得到一种“迟滞”行为。 但是,如果我添加:

 Static Alt As Integer 

调用函数Alt()时出现错误。

另外,如果我添加一行,如: Alt = D而D被decalred静态我得到一个交替值的Alt(1,0,1,0,1,0 ..),而不是(1,1,1,1 )如果有效,或者(0,0,0,0)如果不是。

我应该如何处理这个简单的问题? 任何帮助,将不胜感激。

先谢谢你!

如果我有你,不确定它是否你所需要的。 🙂

 Option Explicit Public intReturnToHold As Double Sub call_function() Debug.Print Alt(2, intReturnToHold) End Sub Function Alt(Soc1 As Double, Optional ByRef intHoldAlt) Static D As Integer Alt = intReturnToHold If Soc1 >= 40 Then Alt = 0 ElseIf Soc1 <= 30 Then Alt = 1 End If intHoldAlt = Alt End Function 

谢谢Nathan的回答。 尽pipe我不太了解你的代码,但我相信我明白了这一点,但是没有成功。

我已经尝试了我以前的想法,并由于某种原因,这次它的工作,这里是代码;

 Function Alt(Soc1 As Double) Static D As Integer If Soc1 >= 40 Then D = 0 ElseIf Soc1 <= 30 Then D = 1 End If Alt = D 

结束function

我以前累了EXACT相同的代码,结果如我在我的问题“交替”1和0(当激活),但现在是恒定1(当激活时)说的结果。

我不是100%确定你在问什么,但是如果你想要一个函数来计算一次,然后保留它的价值,你可以做这样的事情:

 Function Alt(Soc1 As Double) As Long Static D As Long Static Called As Boolean If Called Then Alt = D Exit Function End If If Soc1 >= 40 Then D = 0 ElseIf Soc1 <= 30 Then D = 1 End If Called = True Alt = D End Function 

另一方面,如果你的目标是有一个函数,一旦它的价值1不会重置为0,这样的事情会起作用:

 Function Alt(Soc1 As Double) As Long Static D As Long If D = 1 Then Alt = D Exit Function End If If Soc1 >= 40 Then D = 0 ElseIf Soc1 <= 30 Then D = 1 End If Alt = D End Function