VBA TypeName 函數:取得變數或物件的資料型別名稱
VBA TypeName 函數:取得變數或物件的資料型別名稱
📅 發布日期:2026-09-01
🏷️ 分類:資訊檢查 VBA 函數
💡 函數速查卡
| 函數名稱 | TypeName |
|---|---|
| 所屬類別 | 資訊檢查 (Information) |
| 傳回類型 | String |
| 常用頻率 | ★★★★☆ |
在 Excel VBA 開發中,TypeName 是一個非常強大的診斷與邏輯控制函數。它能傳回變數、運算式或物件的「資料型別名稱字串」(如 Integer, String, Range, Worksheet 等),協助你在動態型別變數(Variant)運算或物件判斷時,確保程式精準防錯與維護安全。
一、 基本語法與參數
TypeName 函數的標準語法結構如下:
TypeName(varname)
| 參數 | 說明 | 預設值 / 必填 |
|---|---|---|
varname |
要檢驗的變數、物件或運算式(包含 Variant、Array、Excel 物件等)。 | 必填 |
二、 核心功能說明
TypeName 會分析傳入的變數或物件,並回傳易於閱讀的英文名稱字串。
在實際 VBA 自動化開發中,常見的使用情境包括:
- 驗證使用者選取項(例如
Selection是儲存格Range還是圖形物件)。 - 檢查
Variant變數目前裝載的資料類型(如String、Double或陣列Variant())。 - 對使用者輸入(InputBox)進行型別安全檢查,防止程式拋出型別不匹配的錯誤。
三、 實用程式碼範例
範例 1:基本變數型別檢驗
檢視不同基本資料型別與動態 Variant 變數的傳回結果:
Sub CheckBasicTypes()
Dim num As Integer
Dim txt As String
Dim vData As Variant
num = 100
txt = "Hello VBA"
vData = 3.14159
Debug.Print TypeName(num) ' 輸出: Integer
Debug.Print TypeName(txt) ' 輸出: String
Debug.Print TypeName(vData) ' 輸出: Double
End Sub
範例 2:判斷 Selection 目前選取的是否為儲存格範圍 (Range)
使用者在 Excel 中可能選取儲存格、圖表或形狀,執行前可用 TypeName 進行安全檢查:
Sub ProcessSelectedRange()
If TypeName(Selection) = "Range" Then
MsgBox "目前選取的儲存格數量:" & Selection.Count, vbInformation
Else
MsgBox "請先選取有效的 Excel 儲存格!", vbExclamation
End If
End Sub
範例 3:辨識動態陣列與未初組化的物件
當變數為陣列或未設定的物件時,TypeName 能精準顯示其特定狀態:
Sub CheckArrayAndObject()
Dim arr As Variant
arr = Array("A", "B", "C")
Dim ws As Worksheet ' 未使用 Set 賦值
Debug.Print TypeName(arr) ' 輸出: Variant()
Debug.Print TypeName(ws) ' 輸出: Nothing
End Sub
四、 常見陷阱與注意事項
⚠️ 注意事項 1:字串比較大小寫敏感
TypeName 傳回的字串遵循標準首字大寫規則(例如 "Range"、"String"、"Double")。在比對字串時,若大小寫不相符(如寫成 "range")可能導致邏輯判斷失敗。建議搭配 UCase 或 LCase 確保嚴謹。
⚠️ 注意事項 2:區分 TypeName 與 VarType 函數
TypeName 傳回的是直觀的「文字描述」(如 "Integer"),而 VarType 傳回的是「整數代碼」(如 2 代表 vbInteger)。日常程式排錯時 TypeName 更加清晰易讀。
五、 相關函數推薦
VarType:傳回指出變數內部儲存特性的整數代碼(vbVarType 常數)。IsNumeric:判斷運算式是否可計算為數值。IsObject:判斷運算式是否代表一個有效的物件變數。IsArray:判斷變數是否為陣列。
六、 官方文件連結
想進一步瞭解完整的型別傳回值對照表與微態細節,可參考微軟官方說明:
留言
張貼留言