輸入提示

強烈建議不要使用型別提示。它們存在並在此處記錄,以用於歷史和向後相容性原因。你應該使用 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 中,有許多函式返回以$結尾的字串。