2011-10-02 88 views
13

考慮的聲明VBA變量/數組的默認值

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

什麼是xavg的默認值?

通過測試,我想說x被初始化爲零。 同樣,我想說的是,avg中的所有元素都被初始化爲零。

但是,我可以編寫依賴於此的代碼嗎?還是默認的初始值實際上是不確定的?

回答

14

如果您指定數據類型但未指定初始值設定項,Visual Basic會將該變量初始化爲其數據類型的默認值,該數據類型對於所有數值類型都爲0(零)。

當你運行一個宏時,所有的變量都被初始化爲一個值。 A 數字變量初始化爲零,可變長度字符串 初始化爲零長度字符串(「」),固定長度字符串爲 ,填充ASCII碼0.變量變量初始化爲 爲空。空變量在數字上下文中由0表示,在字符串上下文中由零長度字符串(「」)表示。

Ref

+0

很確定這是正確的。但是,請注意,如果使用動態數組,則沒有元素會被初始化並在顯式設置之前引用arr(0)會返回錯誤。 – dmogle

+1

另一方面,我非常確定(通過搜索)不能在Excel VBA中聲明初始化器,因爲這是一個.NET事物。 謝謝您的參考!這完全消除了「x」爲零的疑問。固定數組中的每個元素是否也被初始化爲零?我實際上已經發現動態數組在聲明時不會被初始化(僅分配),而我只是想確保固定數組聲明的行爲不同。 –

+0

@Prashant,爲什麼不把手錶加入變量並自己測試? – Reafidy

1

是的,您應該能夠依靠在VBA中初始化爲0的數字類型,因爲這是它們的默認值。但是,如果它讓你擔心,並且起始值非常重要,那麼我的建議就是你明確地給它們賦值0(雖然你真的不需要)。

4

可以隱含依賴於給定的數據類型的默認值,但寫代碼,這並不意味着你總是應該,因爲它是不是很明顯的你在做什麼,這可能會混淆下一個人閱讀你的代碼(從現在開始,這個人可能會是你一年)。

您不能錯誤地將明確的初始值分配給變量。如果你願意,你可以做到這一點在同一行聲明:

Dim x As Double: x = 0 

當然,這對陣列一個涉及多一點,但通常有一個方便的地方,在你的代碼,其中初始化它們進一步下跌無論如何你都在穿越它們。