VBA变量/数组的默认值

问题描述:

考虑的声明VBA变量/数组的默认值

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

什么是xavg的默认值?

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

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

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

当你运行一个宏时,所有的变量都被初始化为一个值。 A 数字变量初始化为零,可变长度字符串 初始化为零长度字符串(“”),固定长度字符串为 ,填充ASCII码0.变量变量初始化为 为空。空变量在数字上下文中由0表示,在字符串上下文中由零长度字符串(“”)表示。

Ref

+0

很确定这是正确的。但是,请注意,如果使用动态数组,则没有元素会被初始化并在显式设置之前引用arr(0)会返回错误。 – dmogle

+1

另一方面,我非常确定(通过搜索)不能在Excel VBA中声明初始化器,因为这是一个.NET事物。 谢谢您的参考!这完全消除了“x”为零的疑问。固定数组中的每个元素是否也被初始化为零?我实际上已经发现动态数组在声明时不会被初始化(仅分配),而我只是想确保固定数组声明的行为不同。 –

+0

@Prashant,为什么不把手表加入变量并自己测试? – Reafidy

是的,您应该能够依靠在VBA中初始化为0的数字类型,因为这是它们的默认值。但是,如果它让你担心,并且起始值非常重要,那么我的建议就是你明确地给它们赋值0(虽然你真的不需要)。

可以隐含依赖于给定的数据类型的默认值,但写代码,这并不意味着你总是应该,因为它是不是很明显的你在做什么,这可能会混淆下一个人阅读你的代码(从现在开始,这个人可能会是你一年)。

您不能错误地将明确的初始值分配给变量。如果你愿意,你可以做到这一点在同一行声明:

Dim x As Double: x = 0 

当然,这对阵列一个涉及多一点,但通常有一个方便的地方,在你的代码,其中初始化它们进一步下跌无论如何你都在穿越它们。