VBA靜態變數與常量(轉)
VBA程式碼中包含變數、運算子和語句。變數在程式碼中起到互交與連線的作用。變數從建立為合適的物件與資料型別,到初始化,再透過運算子計算或執行語句修改,來完成整個互交的過程。
宣告變數的關鍵詞是Dim,其語法是
Dim [WithEvents] varname[([subscripts])] [As [New] type] [, [WithEvents] varname[([subscripts])] [As [New] type]] . . .
Dim 語句的語法包含下面部分:
部分 描述
WithEvents 可選的。關鍵字,說明 varname 是一個用來響應由 ActiveX 物件觸發的事件的物件變數。只有在類模組中才是合法的。使用 WithEvents,可以宣告任意個所需的單變數,但不能使用 WithEvents 建立陣列。New 和 WithEvents 不能一起使用。
varname 必需的。變數的名稱;遵循標準的變數命名約定。
subscripts 可選的。陣列變數的維數;最多可以定義 60 維的多維陣列。subscripts 引數使用下面的語法:
[lower To] upper [, [lower To] upper] . . .
如果不顯式指定 lower,則陣列的下界由 Option Base 語句控制。如果沒有使用 Option Base 語句,則下界為 0。
New 可選的。可隱式地建立物件的關鍵字。如果使用 New 來宣告物件變數,則在第一次引用該變數時將新建該物件的例項,因此不必使用 Set 語句來給該物件引用賦值。New 關鍵字不能宣告任何內部資料型別的變數,以及從屬物件的例項,也不能與 WithEvents 一起使用。
type 可選的。變數的資料型別;可以是 Byte、 Boolean 、Integer、Long、Currency、Single、Double、Decimal(目前尚不支援)、Date、String(對變長的字串)、String * length (對定長的字串)、Object、Variant、使用者定義型別、或物件型別。所宣告的每個變數都要一個單獨的 As type 子句。
而在宣告變數或建立變數的同時,最好先考慮好變數用什麼資料型別,下面 表格顯示所支援的資料型別,以及儲存空間大小與範圍。
資料型別 儲存空間大小 範圍
Byte 1 個位元組 0 到 255
Boolean 2 個位元組 True 或 False
Integer 2 個位元組 -32,768 到 32,767
Long
(長整型) 4 個位元組 -2,147,483,648 到 2,147,483,647
Single
(單精度浮點型) 4 個位元組 負數時從 -3.402823E38 到 -1.401298E-45;正數時從 1.401298E-45 到 3.402823E38
Double
(雙精度浮點型) 8 個位元組 負數時從 -1.79769313486231E308 到
-4.94065645841247E-324;正數時從4.94065645841247E-324 到 1.79769313486232E308
Currency
(變比整型) 8 個位元組 從 -922,337,203,685,477.5808 到 922,337,203,685,477.5807
Decimal 14 個位元組 沒有小數點時為 +/-79,228,162,514,264,337,593,543,950,335,而小數點右邊有 28 位數時為 +/-7.9228162514264337593543950335;最小的非零值為 +/-0.0000000000000000000000000001
Date 8 個位元組 100 年 1 月 1 日 到 9999 年 12 月 31 日
Object 4 個位元組 任何 Object 引用
String
(變長) 10 位元組加字串長度 0 到大約 20 億
String
(定長) 字串長度 1 到大約 65,400
Variant
(數字) 16 個位元組 任何數字值,最大可達 Double 的範圍
Variant
(字元) 22 個位元組加字串長度 與變長 String 有相同的範圍
使用者自定義
(利用 Type) 所有元素所需數目 每個元素的範圍與它本身的資料型別的範圍相同。
其中的Variant是個很特殊的資料型別,它能表示除固定長度之外的所有值,並可以透過VarType來返回其資料子型別。其語法如下:
VarType(varname)
必要的 varname 引數是一個 Variant,包含使用者定義型別變數之外的任何變數。
下面這個表表示VarType返回的值的意義:
常數 值 描述
vbEmpty 0 Empty(未初始化)
vbNull 1 Null(無有效資料)
vbInteger 2 整數
vbLong 3 長整數
vbSingle 4 單精度浮點數
vbDouble 5 雙精度浮點數
vbCurrency 6 貨幣值
vbDate 7 日期
vbString 8 字串
vbObject 9 物件
vbError 10 錯誤值
vbBoolean 11 Boolean 值
vbVariant 12 Variant(只與變體中的陣列一起使用)
vbDataObject 13 資料訪問物件
vbDecimal 14 十進位制值
vbByte 17 位值
vbUserDefinedType 36 包含使用者定義型別的變數
vbArray 8192 陣列
變數因宣告的位置與使用Public或Private關鍵字,其有效範圍可能為3種:過程範圍、模組範圍與全域性範圍。當變數放在模組頭部,並使用Public代替Dim時,這個變數就是全域性變數;而如果是用Dim或者用Private代替Dim時,這個變數是模組級變數;而當變數在過程中宣告就是過程變數了。
通常的過程變數在過程結束後值是不儲存,但如果子程式使用Static語句,或者用Static宣告的過程變數是例外的,下面用兩個例項說明一下。
Static Sub ExcelbaSub2()
Dim X As Integer
MsgBox "X = " & X
X = X + 1
End Sub
Sub ExcelbaSub3()
Static Y As Integer
MsgBox "Y = " & Y
Y = Y + 1
End Sub
執行上面的過程,你就比較容易理解Static的用途了。
除了變數,我們還經常用到一些常量,包含系統定義與自定義的常量。常量與變數有很多相似之處,但常量的值是保持不變的,如果程式碼中常常出現一個數值,最好的方法就是定義成常量,這樣既使程式碼易於編寫,也讓程式碼容易閱讀。定義常量的關鍵詞是Const,其語法是:
語法
[Public | Private] Const constname [As type] = expression
其中的expression就是常量的值,其它與變數相同,就不重複了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-955123/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 常量與變數變數
- 靜態變數變數
- 六、常量與變數變數
- Java 反射修改類的常量值、靜態變數值、屬性值Java反射變數
- 【C++】靜態持續變數?如何建立靜態持續變數?C++變數
- PHP變數與常量學習PHP變數
- 區域性變數和全域性變數(靜態和非靜態)區別變數
- JAVA基礎04——變數與常量Java變數
- Java靜態變數在靜態方法內部無法改變值Java變數
- 微課|玩轉Python輕鬆過二級(2.1.1):常量與變數Python變數
- 變數與常量 - Go 學習記錄變數Go
- 二,Java中常量與變數的理解Java變數
- Java培訓教程分享:變數與常量Java變數
- 重溫手冊(二):變數與常量變數
- Dll堆疊問題(Dll的靜態變數與全域性變數、vs的MT與MD)變數
- java常量和變數Java變數
- java變數及常量Java變數
- Spring如何為靜態變數注入值Spring變數
- 對於systemverilog靜態變數和動態變數 ,描述不正確的是()。變數
- Python進階:如何將字串常量轉化為變數?Python字串變數
- Java基礎-基礎語法-變數與常量Java變數
- 靜態域與靜態方法
- 四:java常量和變數Java變數
- C語言--靜態區域性變數C語言變數
- Java逆向基礎之靜態變數存取Java變數
- Java自學入門之靜態變數Java變數
- 【vue隨手筆記】Vue設定靜態常量Vue筆記
- ConcurrentHashMap(一):常量,成員變數,靜態程式碼塊,內部類,spread函式,tabAt函式等詳解HashMap變數函式BAT
- 大樓的基石 資料型別 變數與常量資料型別變數
- TensorFlow筆記(2) 常量與變數【僅供自學】筆記變數
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- 關於單例及靜態變數測試單例變數
- java執行緒安全問題之靜態變數、例項變數、區域性變數Java執行緒變數
- JavaScript 靜態屬性與靜態方法JavaScript
- net 靜態方法與非靜態方法
- 轉前端 vue.js 學習筆記-1.2-使用 let 與 const 定義常量變數前端Vue.js筆記變數
- Java培訓基礎知識-Java的常量與變數Java變數
- Go基礎系列:常量和變數Go變數
- Day08-常量、變數、作用域變數