2012-10-16 71 views
4

我在Win7下使用Access 2010。我發現我可以在運行時調整我的數組,只需調用ReDim arrayName(x)而不必先聲明數組爲Dim arrayName()Redim沒有Dim?

Sub FooBar() 
    ReDim myArray(2) 
    myArray(0) = "This is the first string in myArray." 
    myArray(1) = "This is the second string in myArray." 
    myArray(2) = "And this is the last string in myArray." 
    MsgBox myArray(0) & vbCrLf & myArray(1) & vbCrLf & myArray(2) 
End Sub 

是否有任何理由我不應該使用這個快捷方式?

乾杯!

+0

快捷方式? 'Redim myArray(0)'比'Dim myArray(0)'長2個字符。 – brettdj

+0

但是,您無法在運行時動態調整數組的大小。所以,如果你在編譯之前不知道數組的大小,我會被告知你應該這樣做:Dim myArray()然後是'ReDim myArray(x)',其中'x'是數組大小的整數/長整型值。 –

+0

這是正確的。您在初始問題中沒有提到動態維度部分。 Rgds – brettdj

回答

7

這很有趣。 This MSDN page確認你所看到的:這裏的報價:

「您可以使用ReDim語句內 過程隱含聲明數組小心不要拼錯數組的名字時,你 使用ReDim語句即使模塊中包含Option Explicit語句爲 ,也會創建第二個數組。

此頁解釋了Redim創建新的數組和現有陣列複製到它(假設有一個):

http://msdn.microsoft.com/en-us/library/w8k3cys2%28v=vs.80%29.aspx

至於你的問題,你應該這樣做,我會說不,因爲它是令人困惑的,並且確實會打開你的代碼來顯示Option Explicit不會捕獲的錯誤。

合理的,Redim Preserve不會出現這種行爲。

+0

感謝Doug對文檔的挖掘。我不想混淆包括我自己在內的任何人,所以我**會繼續並添加明確的Dim語句。然而,我可以'Dim myArray'然後'ReDim myArary(x)',在這種情況下'Option Explicit'不會保護我免受「_Subscript超出範圍_」運行時錯誤的影響。所以,如果我跳過'Dim'並且用'ReDim'聲明和維數組一次,那麼我認爲我實際上對未定義的變量更安全。然而,你做了一些動作並提出了你的意見,所以我會接受你的答案。 –

+1

謝謝!我在想和你在這裏說的一樣,我同意在這種情況下Option Explicit不會保護你。我運行M-Z工具 - http://www.mztools.com/v3/mztools3.aspx - 並使用其評論源代碼工具,它告訴我,如果我有未使用的變量。所以這可能會抓住拼寫錯誤的Redim,假設我從來沒有用正確的拼寫翻譯Redimmedd。我向你致敬(和+1)提出這個有趣的怪癖。 –