在 VBA 中,與在任何其他編程語言中一樣,變量和常量用於存儲任何值。 顧名思義,變量可以改變,而常量存儲固定值。
例如,一個常數 Pi 存儲值 3,14159265... 數字“Pi”在程序執行過程中不會改變,但是將這樣的值存儲為常數還是比較方便的。
同時,我們可以使用變量 增值稅稅率 存儲所購商品的增值稅率。 變量值 增值稅稅率 可能因購買的產品而異。
數據類型
所有變量和常量都屬於特定的數據類型。 下表列出了 VBA 中使用的數據類型以及可能值的描述和範圍:
數據類型 | 尺寸 | 產品描述 | 取值範圍 |
---|---|---|---|
字節 | 1字節 | 正整數; 常用於二進制數據 | 從0 255 |
布爾 | 2字節 | 可以是真或假 | 對或錯 |
整型 | 2字節 | 整數(無小數部分) | 從 -32 到 +768 |
長 | 4字節 | 大整數(無小數部分) | от -2 147 483 648 до +2 147 483 647 |
單 | 4字節 | 單精度浮點數 | 從 -3.4e38 到 +3.4e38 |
Double | 8字節 | 雙精度浮點數 | 從 -1.8e308 到 +1.8e308 |
貨幣 | 8字節 | 浮點數,小數位數固定 | от -922 337 203 685 477.5808 до +922 337 203 685 477.5807 |
日期 | 8字節 | 日期和時間——日期類型的數據由浮點數表示。 這個數字的整數部分錶示日期,小數部分錶示時間。 | 從 1 年 100 月 31 日到 9999 年 XNUMX 月 XNUMX 日 |
對象 | 4字節 | 對象引用 | 任何對象引用 |
串 | 在改變 | 字符集。 String 類型可以是固定長度或可變長度。 更常用於可變長度 | 固定長度 - 最多大約 65 個字符。 可變長度——最多約 500 億個字符 |
變種 | 在改變 | 可能包含日期、浮點數或字符串。 這種類型用於事先不知道將輸入什麼類型的數據的情況。 | 數字 - 雙精度,字符串 - 字符串 |
顯然,使用上表並選擇正確的數據類型,可以更經濟地使用內存(例如,選擇數據類型 整型 代替 長 or 單 代替 Double)。 但是,當使用更緊湊的數據類型時,您需要注意您的代碼不要嘗試將不成比例的大值放入其中。
聲明變量和常量
譯者註: 說到 VBA 中的變量,值得一提的是更重要的一點。 如果我們聲明了一個變量但沒有給它賦值,那麼它會被初始化為一個默認值:
• 文本字符串用空字符串初始化;
• numbers — 值 0;
• 類型變量 布爾 - 錯誤的;
• 日期 – 30 年 1899 月 XNUMX 日。
在使用變量或常量之前,必須先聲明它。 為此,請將以下簡單的代碼行添加到宏中:
Dim Имя_Переменной As Тип_Данных
在上面的代碼行中 變量名 是將在代碼中使用的變量的名稱,並且 數據類型 是本文前面給出的表中的數據類型之一。 例如:
將 sVAT_Rate 調暗為單個 Dim i As Integer
常量的聲明方式類似,但在聲明常量時,必須立即指出它們的值。 例如,像這樣:
常量 iMaxCount = 5000 常量 iMaxScore = 100
不必在 Excel 中聲明變量。 默認情況下,Excel 中所有輸入但未聲明的變量都將具有類型 變種 並且將能夠接受數字和文本值。
因此,程序員可以隨時使用新變量(即使它沒有被聲明),Excel 會將其視為類型變量 變種. 但是,不應該這樣做有幾個原因:
- 內存使用和計算速度。 如果你沒有聲明一個帶有數據類型指示的變量,那麼默認情況下它將被設置為類型 變種. 此數據類型比其他數據類型使用更多內存。 每個變量的幾個額外字節聽起來可能不多,但實際上,程序可以有數千個變量(尤其是在使用數組時)。 因此,變量使用的額外內存如 變種, 與類型變量相比 整型 or 單, 可以加起來很大。 此外,具有類型變量的操作 變種 執行速度比其他類型的變量慢得多,分別是額外的一千個類型的變量 變種 可以顯著減慢計算速度。
- 防止變量名中的拼寫錯誤。 如果聲明了所有變量,則可以使用 VBA 語句 - Option Explicit (我們稍後會談到)以識別所有未聲明的變量。 這消除了由於錯誤寫入變量名而在程序中出現的錯誤。 例如,使用一個名為 增值稅稅率,你可以打錯字,給這個變量賦值,寫:“VATRate = 0,175”。 預計從現在開始,變量 增值稅稅率 應該包含值 0,175 - 但當然不是。 如果啟用強制聲明所有使用的變量的模式,則 VBA 編譯器將立即指示錯誤,因為它不會找到該變量 增值稅率 在那些宣布。
- 突出顯示與變量聲明類型不匹配的值。 如果你聲明一個特定類型的變量並嘗試為其分配不同類型的數據,你會得到一個錯誤,如果不加以糾正,可能會導致程序崩潰。 乍一看,這似乎是不聲明變量的一個很好的理由,但實際上,與以前相比,其中一個變量接收到了它應該接收的錯誤數據——這樣更好! 否則,如果程序繼續運行,結果可能是不正確的和意外的,並且要找到錯誤的原因將變得更加困難。 宏也有可能“成功”執行。 結果,錯誤將被忽視,工作將繼續使用不正確的數據!
在這方面,希望儘早檢測出不正確的數據類型並糾正代碼中的此類錯誤。 由於這些原因,建議您在編寫 VBA 宏時聲明所有變量。
Option Explicit
操作者 Option Explicit 導致聲明將在 VBA 代碼中使用的所有變量,並在編譯期間(在代碼執行開始之前)將所有未聲明的變量標記為錯誤。 應用這個運算符並不難——只需在 VBA 文件的最頂部寫下這一行:
Option Explicit
如果你想總是插入 Option Explicit 到創建的每個新 VBA 模塊的頂部,這可以自動完成。 為此,您需要啟用該選項 需要變量聲明 在 VBA 編輯器設置中。
這樣做是這樣的:
- 從 Visual Basic 編輯器菜單中,單擊 工具 > 選項
- 在出現的對話框中,打開選項卡 編輯頁
- 勾選方塊 需要變量聲明 並按下 OK
啟用時,字符串 Option Explicit 將自動插入到創建的每個新模塊的開頭。
變量和常量的範圍
每個聲明的變量或常量都有自己的有限範圍,即該變量所在的程序的有限部分。 範圍取決於變量或常量的聲明位置。 以變量為例 增值稅稅率, 在函數中使用 總消耗. 下表討論了變量作用域的兩個選項 增值稅稅率在模塊的兩個不同位置聲明:
Option Explicit Dim sVAT_Rate As Single Function Total_Cost() As Double ... End Function | 如果變量 增值稅稅率 在模塊的最開始聲明,那麼這個變量的作用域就是整個模塊(即變量 增值稅稅率 將被本模塊中的所有程序識別)。 因此,如果在函數中 總消耗 變量 增值稅稅率 將被分配一些值,然後在同一模塊中執行的下一個函數將使用該變量 增值稅稅率 具有相同的含義。 但是,如果調用位於另一個模塊中的某個函數,那麼它的變量 增值稅稅率 將不為人知。 |
Option Explicit Function Total_Cost() As Double Dim sVAT_Rate As Single ... End Function | 如果變量 增值稅稅率 在函數開頭聲明 總消耗, 那麼它的作用域將僅限於這個函數(即函數內 總消耗, 你可以使用變量 增值稅稅率,但不在外面)。 嘗試使用時 增值稅稅率 在另一個過程中,VBA 編譯器將報告錯誤,因為該變量未在函數外部聲明 總消耗 (前提是使用了運算符 Option Explicit). |
在上面顯示的示例中,變量在模塊級別使用關鍵字聲明 暗淡. 但是,聲明的變量可能需要在其他模塊中使用。 在這種情況下,聲明一個變量而不是關鍵字 暗淡 必須使用關鍵字 評價.
順便說一句,為了在模塊級別聲明一個變量,而不是關鍵字 暗淡 可以使用關鍵字 私人的,這表明此變量僅適用於當前模塊。
您還可以使用關鍵字來聲明常量。 評價 и 私人的,但不能代替關鍵字 康斯特,隨之而來。
以下示例顯示了關鍵字的使用 評價 и 私人的 應用於變量和常量。
Option Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000 ... | 在本例中,關鍵字 評價 用於聲明變量 增值稅稅率 和常數 i最大計數. 以這種方式聲明的元素範圍將是整個當前項目。 這意味著 增值稅稅率 и i最大計數 將在任何項目模塊中可用。 |
Option Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000 ... | 在這個例子中,聲明一個變量 增值稅稅率 和常數 i最大計數 使用的關鍵字 私人的. 這些元素的範圍是當前模塊。 這意味著 增值稅稅率 и i最大計數 將在當前模塊的所有過程中可用,但對其他模塊中的過程不可用。 |