在本文中,您將了解宏中的常量和變量是什麼,它們可以在哪裡使用,以及不同數據類型之間的主要區別是什麼。 它還將揭示為什麼需要常量,如果你可以只寫一個變量而不改變它。
與其他編程語言一樣,數據可以存儲在變量或常量中(這兩者通常也稱為數據容器)。 這是這些概念之間的主要區別。 前者可能會根據程序中發生的情況而改變。 反過來,常量被設置一次並且不會改變它們的值。
如果您需要多次使用相同的大值,常量會很有用。 您可以簡單地寫下常量的名稱,而不是複制數字。 例如,您可以使用常量“Pi”來存儲 Pi,它是一個常量值。 它很大,每次都很難寫,也很難搜索複製。 因此,寫兩個字符就足夠了,環境會自動使用所需的數字。
Excel 用戶如果需要不時更改其中存儲的值,則需要聲明變量。 例如,您可以設置一個名為 sVAT_Rate 的變量,它將存儲產品的當前增值稅率。 如果它發生變化,您可以快速更正它。 這對於在美國開展業務的人特別有用,在美國,某些商品可能根本不需要繳納增值稅(而且這種稅也因州而異)。
數據類型
每個數據容器可以是多種類型之一。 下表描述了處理信息的標準類型。 它們中有很多,而且初學者最初可能會認為它們相互重複。 但這是一種虛幻的感覺。 繼續閱讀以了解為什麼指定正確的數據類型如此重要。
不建議為小數字使用佔用更多內存空間的數據類型。 例如,對於數字 1,使用 Byte 類型就足夠了。 這將對可執行模塊的性能產生積極影響,尤其是在弱計算機上。 但重要的是不要在這裡走得太遠。 如果您使用的數據類型過於緊湊,則可能無法容納過大的值。
聲明常量和變量
強烈建議不要在沒有事先聲明的情況下使用數據容器。 然後可能會出現一些問題,為避免這些問題,有必要編寫幾行帶有變量或常量枚舉的代碼。
要聲明變量,使用 Dim 語句。 例如,像這樣:
將變量名變暗為整數
Variable_Name 是變量的名稱。 接下來,編寫 As 運算符,指示數據類型。 您可以插入自己的名稱和數據類型,而不是字符串“Variable_Name”和“Integer”。
也可以聲明常量,但您必須首先指定它們的值。 選項之一是:
常量 iMaxCount = 5000
公平地說,在某些情況下您可以不聲明變量,但在這種情況下,它們將自動被分配類型 Variant。 但是,不建議這樣做,原因如下:
- 變量的處理速度要慢得多,如果有很多這樣的變量,信息處理在弱計算機上會顯著減慢。 似乎那幾秒鐘將決定? 但是,如果您必須編寫大量代碼行,然後還要在性能較弱的計算機上運行它(考慮到現代辦公套件需要大量 RAM,這些計算機仍在銷售),您可以完全停止工作。 在某些情況下,錯誤地編寫宏會導致具有少量 RAM 且並非旨在執行複雜任務的智能本凍結。
- 名稱中的打印錯誤是允許的,這可以通過使用 Option Explicit 語句來防止,該語句允許您找到未聲明的變量(如果找到)。 這是一種檢測錯誤的簡單方法,因為最輕微的拼寫錯誤都會導致解釋器無法識別變量。 而且,如果您打開變量聲明模式,如果發現未在模塊一開始就聲明的數據容器,解釋器將根本不允許您運行宏。
- 避免變量值與數據類型不匹配導致的錯誤。 通常,將文本值分配給整數變量會引發錯誤。 是的,一方面,泛型類型是在沒有聲明的情況下分配的,但是如果提前聲明它們,則可以避免隨機錯誤。
因此,無論如何,強烈建議在 Excel 宏中聲明所有變量。
在聲明變量時,還要記住一件事。 聲明變量時可以不為變量分配任何值,但在這種情況下,它會獲取默認值。 例如:
- 行變為空。
- 數字取值為 0。
- 布爾類型的變量最初被認為是假的。
- 默認日期為 30 年 1899 月 XNUMX 日。
例如,如果之前沒有指定值,則不需要將值 0 分配給整數變量。 她已經包含了這個號碼。
選項顯式聲明
此語句允許您聲明 VBA 代碼中使用的所有變量,並在代碼運行之前確定是否存在任何未聲明的容器。 要使用此功能,只需在宏代碼的最頂部編寫一行 Option Explicit 代碼。
如果您每次都需要在代碼中包含此語句,您可以使用 VBA 編輯器中的特殊設置來實現。 要啟用此選項,您必須:
- 沿著路徑進入開發環境——工具>選項。
- 在此之後打開的窗口中,打開編輯器選項卡。
- 最後,選中 Require Variable Declaration 項旁邊的框。
完成這些步驟後,單擊“確定”按鈕。
就是這樣,現在在編寫每個新宏時,此行將自動插入代碼頂部。
常量和變量的範圍
每個變量或常量只有一個有限的範圍。 這取決於你在哪裡聲明它。
假設我們有一個函數 總消耗(), 它使用變量 增值稅稅率. 根據模塊中的位置,它將具有不同的範圍:
Option Explicit 將 sVAT_Rate 調暗為單一 函數 Total_Cost() 作為 Double . . . 函數結束 | 如果在模塊本身的頂部聲明了一個變量,它將在整個模塊中傳播。 也就是說,它可以被每個過程讀取。 此外,如果其中一個程序改變了變量的值,那麼下一個程序也會讀取這個更正後的值。 但是在其他模塊中這個變量仍然不會被讀取。 |
Option Explicit 函數 Total_Cost() 作為 Double 將 sVAT_Rate 調暗為單一 . . . 函數結束 | 在這種情況下,變量是在過程中聲明的,如果在另一個過程中使用,解釋器會拋出錯誤。 |
如果您希望變量被其他模塊讀取,您必須使用 Public 關鍵字而不是 Dim 關鍵字。 同樣,您可以使用 Public 語句將變量的範圍限制為僅當前模塊,而不是 Dim 一詞。
可以類似的方式設置常量的作用域,只不過這裡的關鍵字是和Const運算符一起寫的。
這是一個表格,其中有一個很好的示例,說明了它如何處理常量和變量。
Option Explicit 公共 sVAT_Rate 為單身 公共常量 iMax_Count = 5000 | 在此示例中,您可以看到如何使用 Public 關鍵字來聲明變量,以及在 Visual Basic 編輯器中需要編寫什麼來聲明公共常量。 這些值容器的範圍適用於所有模塊。 |
Option Explicit 私人 sVAT_Rate 為單身 私有常量 iMax_Count = 5000 | 在這裡,變量和常量是使用 Private 關鍵字聲明的。 這意味著它們只能在當前模塊中看到,其他模塊中的程序不能使用它們。 |
為什麼需要常量和變量
常量和變量的使用可以增加代碼的可理解程度。 如果初學者一般對為什麼需要變量沒有疑問,那麼關於常量的需要就會有很多歧義。 乍一看,這個問題似乎很合乎邏輯。 畢竟,您可以聲明一個變量,然後再也不更改它。
事實證明,對於佔用大量內存空間的數據類型的使用,答案在同一平面上。 如果我們正在處理大量變量,我們可能會意外更改現有容器。 如果用戶規定某個值永遠不會改變,那麼環境會自動控制這一點。
當宏由多個程序員編寫時,這一點尤其重要。 人們可能知道某些變量不應該改變。 而另一個不是。 如果您指定 Const 運算符,其他開發人員將知道該值不會更改。
或者,如果有一個名稱相同的常量,而該變量具有不同但相似的名稱。 開發人員可以簡單地混淆它們。 例如,一個不需要更改的變量稱為Variable11,另一個可以編輯的變量稱為Variable1。 一個人在編寫代碼時會自動跳過一個額外的單元而沒有註意到它。 結果,值的容器將被更改,不應觸摸。
或者開發人員自己可能會忘記哪些變量他可以觸及,哪些他不能觸及。 這種情況經常發生在代碼寫了幾個星期,並且代碼變大的時候。 在此期間,很容易忘記這個或那個變量的含義。
是的,您可以在這種情況下使用註釋,但是指定單詞 Const 不是更容易嗎?
結論
變量是宏編程的重要組成部分,它允許您執行複雜的操作,從計算到通知用戶某些事件或在電子表格的單元格中指定特定值。
如果開發人員確定這些容器的內容將來不會改變,則應該使用常量。 建議不要改用變量,因為可能會不小心出錯。