【问题标题】:Setting variables equal to 0 for multiple subroutines in VBA在VBA中为多个子程序设置变量等于0
【发布时间】:2016-07-18 19:45:08
【问题描述】:

我正在尝试使用集合在每次运行子之前将变量设置为等于 0。我有一堆指标作为单独的子例程,对于每个子例程,我将变量声明为 long,然后将它们全部设置为 0,然后让它们从所需的任何数据中提取。我希望不必每次都将它们设置为 0,而是在开始时将它们设置为相等,这样就不必将其放入每个子例程中,但我不清楚如何要做到这一点。我试过这段代码,但我不知道它是否正确或放在哪里:

Dim myVars As Collection
Set myVars = New Collection
Dim j As Variant
myVars.Add a
myVars.Add b
myVars.Add c
myVars.Add d
myVars.Add e


For j = 1 To myVars.Count
myVars(j) = 0
Next j

【问题讨论】:

  • 如果它们是全局变量,您可以创建一个新的子 SetToZero(),您只需在其他每个子的顶部运行。
  • j 是一个循环计数器,不要将其声明为variant!这样做会在您稍后查看代码时造成混乱,并且会带来轻微的性能损失 - 每次使用 j 时,VBA 都必须确定其中包含的数据的类型。这对于您的 5 个项目的循环来说并不是什么大问题,但是随着代码库的增长,它会开始累加起来,您会想知道为什么您的代码需要永远运行。
  • 我得到一个对象所需的错误 j 否则我该如何解决这个问题

标签: vba excel variables subroutine


【解决方案1】:

如果您将变量声明为数字类型(例如,LongIntegerByteDoubleSingle),那么它们会自动分配一个值0.

在任何情况下,您最好使用强类型变量,这样可以避免使用集合或使变量在范围内成​​为全局变量。

【讨论】:

  • 对,但是当我这样做时,实际的物理值 0 并没有出现,它只是将其留空
  • 声明为 Variant 不行,试试:Dim foo As Long : Debug.Assert foo = 0 : Debug.Print "Foo = " & foo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
相关资源
最近更新 更多