代碼有兩個問題:您不需要變量聲明,而且您的變量的作用域與預期不同。
在Visual Basic編輯器中,選擇工具 - 選項並選中需要變量聲明。這將自動包括Option Explicit
在任何新模塊的頂部。不幸的是,對於現有的模塊,您必須自己在頂部輸入Option Explicit
。
如果您需要變量聲明,編譯器會告訴您何時使用不在範圍內的變量。它會告訴你(以你爲例)Variable not defined
並突出顯示num
(因爲它是第一個)。這將有助於您在將來識別這些類型的問題。
顯然你打算聲明你的變量,你只是沒有在正確的位置聲明它們。您的變量可以有三個範圍:本地,模塊,全局。您總是希望使用適合您代碼的最小範圍。所以使用本地,除非你需要使用模塊。並且使用模塊,除非全球是絕對必要的。這裏的範圍是如何工作的:
本地 - 使用Dim
過程中(Sub
和End Sub
或同等之間)。該過程之外沒有任何東西可以看到或更改變量。
模塊 - 使用Private
(Dim
也可以)位於模塊頂部,在任何程序之外。現在該模塊中的所有程序都可以看到並使用該變量。其他模塊中的程序不能。
全球 - 使用Public
(Global
也適用)以標準模塊(而不是類模塊,像的ThisWorkbook,Sheet1中,Userform1,或1類)的頂部。項目中的每個過程都可以看到並設置此變量。
對於您的情況,您應該使用模塊範圍變量。您的事件子目錄位於相同的模塊中,並且它們是使用這些變量的唯一子目錄。如果模塊外部的過程需要使用該變量,則可能需要將其移至標準模塊並用Public
聲明。但是,作爲最後的手段。還有其他選項,比如將變量作爲參數傳遞,比使用全局作用域變量更好。
還有兩件事:如果您使用Application.InputBox()
,您可以指定一個確保用戶輸入數字的類型。如果您想繼續使用InputBox()
功能,那麼CInt
將在用戶輸入任何不能強制爲數字的內容時出錯。在這種情況下,請考慮使用Val
函數。
將您的變量拉出子變量。只需將它們自己放置即可。快速搜索找到[this](http://stackoverflow.com/questions/2722146/how-do-i-declare-a-global-variable-in-vba)。 –
謝謝。你的解決方案很好。 – neofini