输入提示

强烈建议不要使用类型提示。它们存在并在此处记录,以用于历史和向后兼容性原因。你应该使用 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 中,有许多函数返回以$结尾的字符串。