2013-03-22 42 views
3

我有以下代碼,我不知道爲什麼Excel在Test2()子例程中看不到Enum類型(我聲明) :Excel,Visual Basic編輯器,枚舉類型聲明 - 用戶定義類型未定義

Private Sub Test1() 
    Dim test_name As Variant 

End Sub 


Private Enum rlcRollercoasterState 
    rlcRollercoasterDisabled 
    rlcRollercoasterEnabled 
    rlcRollercoasterBroken 
    rlcRollercoasterMissing 
End Enum 


Private Sub Test2() 
    Dim var1 As Variant 

    Dim rlcRC1State As rlcRollercoasterState ' User-defined type not defined 

End Sub 

如果我複製Test1()子程序Enum類型聲明後,Excel識別在Test1()rlcRollercoasterState類型。 如果我註釋掉Test1()子例程,Excel將識別Test2()中的rlcRollercoasterState類型。

爲什麼Excel無法在Test2()子例程中看到rlcRollercoasterState類型?

回答

8

enter image description here

總是 「調試/編譯的VBAProject」 運行的代碼之前(ALT-DL)。就像在你的例子中,它給出了錯誤。編譯錯誤表示它需要在模塊開頭的聲明語句。

+0

非常感謝你,我不會想到這一點。我有一個理論問題:程序在運行之前是否需要編譯? (我的意思是,當我運行程序時,不是程序的_compilation_是_run_過程的一部分嗎? - 這意味着即使當我運行程序時,也應該顯示錯誤消息,而不僅僅是當我_compile_程序,我不太明白)。 – colemik 2013-03-22 01:23:14

+0

如果您希望VBA僅根據需要編譯代碼,則可以選中Compile On Demand複選框。 VBA在運行過程之前編譯代碼。 http://books.google.co.in/books?id=n-2NtSJNHBYC&pg=PA47&lpg=PA47&dq=You+can+select+the+Compile+On+Demand+check+box+if+you+want+VBA+到+編譯+的+代碼+只+ AS +需要與源= BL&OTS = GHLiuIK82q&SIG = b_ub91b56s5OjwdfHtiDzMcOZPw&HL = EN&SA = X&EI = 3bVLUYzHDoWsrAeevYH4DQ&VED = 0CDEQ6AEwAA#v = onepage&q =你%20can%20select%第二十條%20Compile%20On%20Demand%20check%20box% 20if%20you%20want%20VBA%20to%20compile%第二十條%20code%20only%20AS%20needed&F =假 – 2013-03-22 01:35:35