2012-05-30 116 views
0

我找不到任何文檔來支持我的發現,但這就是我在這裏的原因。在我的模塊中,我聲明瞭多個全局數組本身並不是一個問題,但似乎正在發生的是如果我嘗試在一個語句中聲明多個數組,只有第一個被初始化。任何人都可以證實這是行爲和/或指向我的文檔,支持這?Excel VBA全局變量

當我進入的代碼,如果我找ARR1它的定義不工作陳述

Global arr1, arr2, arr3 

的例子可以找到。如果我查找arr2或arr3,我會收到一條消息,指出「無法識別cusor下的標識符」。如果我將arr3移動到一條新線並如此剝離:

Global arr1, arr2 
Global arr3 

現在已經認識到了。所以我不知道這是已知的行爲,錯誤還是其他。

+1

'全球A,B,C'是好的,所有3個應該沒有問題定義,您需要擴展你的例子。您可以將'option explicit'添加到模塊的頂部;這會導致VBA在您嘗試使用未聲明/超出範圍變量時引發錯誤。 (它最好定義一個類型'全局a()作爲字符串,b()作爲字符串...') –

+1

在這兩種情況下,所有變量''arr1'',''arr2''和''arr3'' if聲明你指定的方式應該工作。所有這些都是「變體」類型。如果您不明確聲明任何類型,則所有變量都變爲「TypeOf」變體默認值。 – Cylian

+0

我也可以如上所述聲明變量,並在相同模塊和其他模塊中的以下代碼中查看它們的定義。我第二次由@亞歷克斯推薦。使用Option Explicit。關於全局變量的一件事是,它們不能在類中聲明 - 它不會被編譯(但這顯然不是你的問題)。 –

回答

0

這工作

Global arr1, arr2, arr3 

Sub test() 

    Debug.Print CLng(arr1) 
    Debug.Print CLng(arr2) 
    Debug.Print CLng(arr3) 

End Sub 

它打印三個零。你說「如果我尋找」的定義,但我不確定這意味着什麼。如果我在代碼中放置了斷點並將鼠標懸停在變量上,它們都會返回「Empty」。

0

我不確定使用「Global」而不是「Public」。我不認爲前者實際上是記錄在案的。 但無論如何,arrX都是類型變體。他們不是專門陣列,直到被強制。 正如在以前的評論中提到,數組可以聲明如下: 暗淡ARR1()爲的myType 暗淡ARR2(1〜10)的myType

某處代碼,你還需要初始化ARR1 的結構Redim arr1(i to j)

這比安裝變體更安全,更高效。 變體可以高效地讀寫數據塊,但如果要使用它們,最好將它們轉換爲數組。

這裏有幾個參考的,除了MSDN:

http://www.cpearson.com/excel/topic.aspx

http://fastexcel.wordpress.com/2011/05/25/writing-efficient-vba-udfs-part-1/