使用非默认值在VBA中初始化静态变量

VBA中的静态变量非常简单:

Public Sub foo()
    Static i As Integer
    i = i + 1
    Debug.Print i
End Sub

输出(多次调用时):

1
2
3
...

问题是,VBA不支持在与声明相同的行上初始化变量(不包括:用于在一行上放置两行):

Public Sub foo()
    Dim i As Integer = 5 'won't compile!

    Dim j As Integer
    j = 5 'we have to do this instead
End Sub

这与静态变量冲突:

Public Sub foo()
    Static i As Integer 'we can't put an initial value here...
    i = 5 'so this is how we'd usually initialize it, but...
    i = i + 1
    Debug.Print i
End Sub

您可能会看到发生了什么-每次foo调用变量时所做的第一件事就是将其自身设置回5。输出:

6
6
6
...

如何在VBA中将静态变量初始化为默认值以外的值?还是只是VBA丢球?

亚历克斯·K

如果要保留静态语义而不切换到全局变量,执行此操作的一种方法是嗅探默认值,然后设置初始条件:

Static i As Integer
if (i = 0) then i = 5

更安全的选择也许是

Static i As Variant
if isempty(i) then i = 5

或者

Public Sub foo(optional init as boolean = false)
    Static i As Integer
    if init then
      i = 5
      exit sub
    endif

您可能还可以使用默认属性创建一个类并使用class_initialize它,但这可能有点麻烦。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用非恒定值初始化静态变量

来自分类Dev

c ++对象中静态变量的默认初始化值是什么?

来自分类Dev

修改用静态变量初始化的非静态变量的值也会修改静态变量

来自分类Dev

在C99中使用静态变量初始化静态变量

来自分类Dev

为什么在这里允许使用非const初始化静态变量?

来自分类Dev

静态变量的默认值

来自分类Dev

使用引发异常的方法在静态块中初始化的最终静态变量

来自分类Dev

Java-静态初始值设定项与静态变量的默认值

来自分类Dev

.lib中的C ++静态变量未初始化

来自分类Dev

在PHP中初始化静态变量

来自分类Dev

在Java中初始化静态变量

来自分类Dev

Java中静态变量的初始化

来自分类Dev

多线程声明中的静态变量初始化

来自分类Dev

在Unity中哪里可以初始化静态变量?

来自分类Dev

.lib中的C ++静态变量未初始化

来自分类Dev

使用静态变量初始化同一类中的变量

来自分类Dev

使用静态变量初始化同一类中的变量

来自分类Dev

静态变量的初始化

来自分类Dev

静态变量未初始化

来自分类Dev

静态变量初始化过程

来自分类Dev

静态变量本身的初始化

来自分类Dev

未初始化变量的默认值

来自分类Dev

如何使用变量使用默认值初始化 MutableList?

来自分类Dev

是否可以通过调用Toolkit来初始化非实例化类中的静态变量?

来自分类Dev

Swift中未初始化的变量/对象的默认值

来自分类Dev

C ++中未初始化变量的默认值是什么?

来自分类Dev

使用所有默认值初始化记录类型的常量变量

来自分类Dev

Rails使用默认值初始化新对象

来自分类Dev

多值设置未使用默认值初始化