在旧宏中,我在一行中声明了许多变量,如
Dim Jan_Bnm, Feb_Bnm, Mar_Bnm, Apr_Bnm, Mai_Bnm, Jun_Bnm, Jul_Bnm, Aug_Bnm, Sep_Bnm, Okt_Bnm, Nov_Bnm, Dez_Bnm
使用这些变量,我做了一些像
这样的计算Jan_Bnm = Jan_Bnm + 1
'e.g. empty = empty + 1 -> 1
现在我有问题,如果宏运行两次,旧值仍然存储
Jan_Bnm = Jan_Bnm + 1
'1 = 1 + 1 -> 2
所以我的所有价值都加倍了。
是否可以通过声明将所有变量设置为零,这样我就不必设置每个(几百个)变量?
答案 0 :(得分:1)
您目前的情况如下:
Dim a As Long, b As Long, c As Long
Sub proc1()
End Sub
Sub proc2()
End Sub
第一种避免a,b和c的方法在运行proc1()时仍然有一个值,第二次是在proc1()上重新初始化它们:
Sub proc1()
a = 0
b = 0
c = 0
'rest of the code
End Sub
另一种方法是,您可以将变量作为参数传递,并仅在proc1()上声明它们:
Sub proc1()
Dim a As Long, b As Long, c As Long
'rest of the code
proc2 a,b,c
End Sub
Sub proc2(ByVal a As Long, ByVal b As Long, ByVal c As Long)
End Sub
或者,最后,您可能会考虑使用集合而不是N个变量。示例:
Dim myVars As New Collection
myVars.Add a
myVars.Add b
myVars.Add c
现在,您将能够按如下方式重新初始化变量:
For j = 1 To myVars.Count
myVars(j) = 0
Next j
我对N个变量(公开声明或私有声明+重新初始化)所说的内容也适用于集合,但只有一次而不是N次(这就是为什么我认为它会简化)。