在一行中声明多个变量为零

时间:2015-02-12 08:35:07

标签: vba excel-vba excel

在旧宏中,我在一行中声明了许多变量,如

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

所以我的所有价值都加倍了。

是否可以通过声明将所有变量设置为零,这样我就不必设置每个(几百个)变量?

1 个答案:

答案 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次(这就是为什么我认为它会简化)。