在VBA中,可以处理UDF名称,就像Dim
med变量一样。例如
Function ADD(a, b) As Long
ADD = a
ADD = ADD + b
End Function
ADD
存储中间值以及最终结果。我的问题是;就幕后情况而言,在标准变量和函数名变量中存储数字/数据之间是否有任何区别。
我担心,如果使用函数名,变量更改时,调用函数的例程可能会更新,而不是仅在执行End Function
时。 IE浏览器。如果你有一些代码
answer = ADD(1, 2)
然后在内存中answer
被写入两次,一次是ADD = a
,一次是ADD = ADD + b
。当然我们没有看到这一点,因为答案留给了最终的ADD
值
我问,因为我经常发现我使用中间变量分阶段建立函数答案,然后将其传递给函数名本身,而我可以直接写入函数名。
E.g。
Function ADD(a, b) As Long
Dim tot As Long
tot = a
tot = tot + b
ADD = tot
End Function
vs第一个例子。它们实现同样的效果,在第二个示例中,tot
表示公式结果,因此我们需要最后的ADD = tot
行。为了速度,我想减少所做的任何写入,因此在使用第一种方法而不是声明中间体时,在速度方面是否有任何缺点,而不是可读性?
注意,澄清一下,并非所有中间体,我只是指代表示函数结果的单个中间体,可以用代码中的函数名替换。
答案 0 :(得分:2)
在速度方面,第一种方法应该稍快一些 - 你会减少一个变量(但我怀疑有人会注意到它)。
一般情况下,如果你不小心(或者如果你是VBA初学者),使用第一种方法可以带你进行递归:
Option Explicit
Dim lng10 As Long
Public Sub Test()
lng10 = 0
Debug.Print ADD2(1, 1)
End Sub
Function ADD2(a As Long, b As Long) As Long
lng10 = lng10 + 1
ADD2 = a + b
If lng10 < 10 Then
ADD2 = ADD2 + ADD2(1, 1)
End If
End Function
如果递归没有底部,则会出现溢出错误。 换句话说,这将是一个运行时错误:
Option Explicit
Dim lng10 As Long
Public Sub Test()
lng10 = 0
Debug.Print ADD2(1, 1)
End Sub
Function ADD2(a As Long, b As Long) As Long
lng10 = lng10 + 1
ADD2 = ADD2(a, b)
End Function