【发布时间】:2011-11-29 10:19:00
【问题描述】:
考虑声明
Dim x As Double
Dim avg(1 To 10) As Double
x 和 avg 中的默认值是什么?
通过测试,我想说x被初始化为零。
同样,我想说avg 中的所有元素都被初始化为零。
但是,我可以编写依赖于此的代码吗?还是默认初始化值实际上是不确定的?
【问题讨论】:
标签: arrays vba default-value
考虑声明
Dim x As Double
Dim avg(1 To 10) As Double
x 和 avg 中的默认值是什么?
通过测试,我想说x被初始化为零。
同样,我想说avg 中的所有元素都被初始化为零。
但是,我可以编写依赖于此的代码吗?还是默认初始化值实际上是不确定的?
【问题讨论】:
标签: arrays vba default-value
如果您指定数据类型但未指定初始化程序,Visual Basic 会将变量初始化为其数据类型的默认值,对于所有数字类型,该默认值都是 0(零)。
当您运行宏时,所有变量都被初始化为一个值。一种 数值变量初始化为零,可变长度字符串为 初始化为长度为零的字符串 (""),固定长度的字符串为 用 ASCII 码 0 填充。变体变量被初始化为 空的。空变量在数字上下文中由零表示 以及字符串上下文中的零长度字符串 ("")。
Ref.
【讨论】:
x 为零的任何疑问。尽管固定数组中的每个元素也都初始化为零的情况吗?我实际上已经发现动态数组在声明时不会被初始化(仅分配),我只是想确保固定数组声明的行为方式不同。
是的,您应该能够依赖在 VBA 中初始化为 0 的数字类型,因为这是它们的默认值。
但是,如果它让您担心,并且起始值非常重要,那么我的建议是您只需将值 0 显式分配给它们(尽管您确实不需要)。
【讨论】:
您可以编写隐式依赖于给定数据类型的默认值的代码,但这并不意味着您总是应该,因为它并不那么明显你在做什么,这可能会让下一个阅读你的代码的人感到困惑(那个人可能是一年后的你)。
明确地为变量分配初始值不会出错。如果你愿意,你可以在声明的同一行进行:
Dim x As Double: x = 0
当然,它涉及到数组,但通常有一个方便的地方可以在您的代码中进一步初始化它们,无论如何您都在遍历它们。
【讨论】: