【问题标题】:VBA variable/array default valuesVBA 变量/数组默认值
【发布时间】:2011-11-29 10:19:00
【问题描述】:

考虑声明

Dim x As Double
Dim avg(1 To 10) As Double

xavg 中的默认值是什么?

通过测试,我想说x被初始化为零。 同样,我想说avg 中的所有元素都被初始化为零。

但是,我可以编写依赖于此的代码吗?还是默认初始化值实际上是不确定的?

【问题讨论】:

    标签: arrays vba default-value


    【解决方案1】:

    如果您指定数据类型但未指定初始化程序,Visual Basic 会将变量初始化为其数据类型的默认值,对于所有数字类型,该默认值都是 0(零)。

    当您运行宏时,所有变量都被初始化为一个值。一种 数值变量初始化为零,可变长度字符串为 初始化为长度为零的字符串 (""),固定长度的字符串为 用 ASCII 码 0 填充。变体变量被初始化为 空的。空变量在数字上下文中由零表示 以及字符串上下文中的零长度字符串 ("")。

    Ref.

    【讨论】:

    • 很确定这是正确的。但是请注意,如果您使用动态数组,则不会初始化任何元素,并且在显式设置之前引用 arr(0) 会返回错误。
    • 顺便说一句,我很确定(通过搜索 SO)不可能在 Excel VBA 的声明中指定初始化程序,因为这是 .NET 的事情。谢谢你的参考!这完全消除了x 为零的任何疑问。尽管固定数组中的每个元素也都初始化为零的情况吗?我实际上已经发现动态数组在声明时不会被初始化(仅分配),我只是想确保固定数组声明的行为方式不同。
    • @Prashant,为什么不给变量添加一个手表并自己测试呢?
    【解决方案2】:

    是的,您应该能够依赖在 VBA 中初始化为 0 的数字类型,因为这是它们的默认值。

    但是,如果它让您担心,并且起始值非常重要,那么我的建议是您只需将值 0 显式分配给它们(尽管您确实不需要)。

    【讨论】:

      【解决方案3】:

      可以编写隐式依赖于给定数据类型的默认值的代码,但这并不意味着您总是应该,因为它并不那么明显你在做什么,这可能会让下一个阅读你的代码的人感到困惑(那个人可能是一年后的你)。

      明确地为变量分配初始值不会出错。如果你愿意,你可以在声明的同一行进行:

      Dim x As Double: x = 0
      

      当然,它涉及到数组,但通常有一个方便的地方可以在您的代码中进一步初始化它们,无论如何您都在遍历它们。

      【讨论】:

        猜你喜欢
        • 2011-08-27
        • 1970-01-01
        • 2012-06-25
        • 2011-10-14
        • 2011-09-22
        • 2014-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多