輸入提示
強烈建議不要使用型別提示。它們存在並在此處記錄,以用於歷史和向後相容性原因。你應該使用 As [DataType]
語法。
Public Sub ExampleDeclaration()
Dim someInteger% '% Equivalent to "As Integer"
Dim someLong& '& Equivalent to "As Long"
Dim someDecimal@ '@ Equivalent to "As Currency"
Dim someSingle! '! Equivalent to "As Single"
Dim someDouble# '# Equivalent to "As Double"
Dim someString$ '$ Equivalent to "As String"
Dim someLongLong^ '^ Equivalent to "As LongLong" in 64-bit VBA hosts
End Sub
型別提示會顯著降低程式碼可讀性並鼓勵傳統的匈牙利表示法 ,這也會妨礙可讀性:
Dim strFile$
Dim iFile%
相反,宣告變數更接近它們的用法,併為它們的用途命名,而不是在它們的型別之後:
Dim path As String
Dim handle As Integer
型別提示也可用於文字,以強制執行特定型別。預設情況下,小於 32,768 的數字文字將被解釋為 Integer
文字,但是使用型別提示可以控制:
Dim foo 'implicit Variant
foo = 42& ' foo is now a Long
foo = 42# ' foo is now a Double
Debug.Print TypeName(42!) ' prints "Single"
文字通常不需要型別提示,因為它們將被分配給使用顯式型別宣告的變數,或者在作為引數傳遞時隱式轉換為適當的型別。使用其中一個顯式型別轉換函式可以避免隱式轉換:
'Calls procedure DoSomething and passes a literal 42 as a Long using a type hint
DoSomething 42&
'Calls procedure DoSomething and passes a literal 42 explicitly converted to a Long
DoSomething CLng(42)
返回字串的內建函式
處理字串的大多數內建函式有兩個版本:一個返回 Variant
的鬆散型別版本和一個返回 String
的強型別版本(以 $
結尾)。除非你將返回值分配給 Variant
,否則你應該更喜歡返回 String
的版本 - 否則會返回值的隱式轉換。
Debug.Print Left(foo, 2) 'Left returns a Variant
Debug.Print Left$(foo, 2) 'Left$ returns a String
這些功能是:
- VBA.Conversion.Error - > VBA.Conversion.Error $
- VBA.Conversion.Hex - > VBA.Conversion.Hex $
- VBA.Conversion.Oct - > VBA.Conversion.Oct $
- VBA.Conversion.Str - > VBA.Conversion.Str $
- VBA.FileSystem.CurDir - > VBA.FileSystem.CurDir $
- VBA。[_ HiddenModule] .Input - > VBA。[_ HiddenModule] .Input $
- VBA。[_ HiddenModule] .InputB - > VBA。[_ HiddenModule] .InputB $
- VBA.Interaction.Command - > VBA.Interaction.Command $
- VBA.Interaction.Environ - > VBA.Interaction.Environ $
- VBA.Strings.Chr - > VBA.Strings.Chr $
- VBA.Strings.ChrB - > VBA.Strings.ChrB $
- VBA.Strings.ChrW - > VBA.Strings.ChrW $
- VBA.Strings.Format - > VBA.Strings.Format $
- VBA.Strings.LCase - > VBA.Strings.LCase $
- VBA.Strings.Left - > VBA.Strings.Left $
- VBA.Strings.LeftB - > VBA.Strings.LeftB $
- VBA.Strings.LTtrim - > VBA.Strings.LTrim $
- VBA.Strings.Mid - > VBA.Strings.Mid $
- VBA.Strings.MidB - > VBA.Strings.MidB $
- VBA.Strings.Right - > VBA.Strings.Right $
- VBA.Strings.RightB - > VBA.Strings.RightB $
- VBA.Strings.RTrim - > VBA.Strings.RTrim $
- VBA.Strings.Space - > VBA.Strings.Space $
- VBA.Strings.Str - > VBA.Strings.Str $
- VBA.Strings.String - > VBA.Strings.String $
- VBA.Strings.Trim - > VBA.Strings.Trim $
- VBA.Strings.UCase - > VBA.Strings.UCase $
請注意,這些是函式別名,而不是型別提示。Left
功能對應隱藏的 B_Var_Left
功能,而 Left$
版本對應隱藏的 B_Str_Left
功能。
在 VBA 的早期版本中,$
符號不是允許的字元,函式名稱必須用方括號括起來。在 Word Basic 中,有許多函式返回以$結尾的字串。