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