VBA左function问题
我试图使用这个基本的示例代码中的左侧函数,它给了我编译错误,但是,当我使用Right函数,而不是左侧可以找出原因。
示例代码:
Public Sub LeftSub() Dim SourceRange As Range, DestinationRange As Range Dim i As Integer Set SourceRange = Workbooks("xx.xlsx").Sheets("Sheet1").Range("B1:B10") Set DestinationRange = Workbooks("xx.xlsx").Sheets("Sheet1").Range("A1:A10") For i = 1 To SourceRange.Count DestinationRange(i, 1).Value = Left(SourceRange(i, 1).Value, 2) Next i End Sub
Left
可以解决(按此顺序):
- 一个名为
Left
的局部variables - 模块范围的variables或同一模块中的成员
- 基类中的成员(例如,表单模块中的
UserForm.Left
) - 同一项目的标准模块中的公共/全球成员
- VBA标准库中的公共/全局成员或任何引用的项目(按项目引用对话框中指定的顺序)
第一场比赛是使用的, 无论其签名 :
这个函数的标识符是隐藏内置的。 要访问内置的Left
函数,您现在需要限定它:
Debug.Print VBA.Strings.Left(...)
稍有不同,但请注意VBA.Strings.Left
返回一个隐含的Variant
:
它的小强types的小弟弟返回一个明确的String
:
因此避免了隐式types转换的代价; 只要String
参数永远不会是Null
Left$
就是Left
的 – 这两个函数非常相似,除了这个:
Debug.Print Left(Null, 1) ' outputs Null Debug.Print Left$(Null, 1) ' raises runtime error 94 - Invalid use of Null
这就是说,除非你正在处理access-vba ,否则在VBA中可能永远不会遇到Null
。
这适用于我没有编译错误:
Option Explicit Public Sub LeftSub() Dim SourceRange As Range, DestinationRange As Range Dim i As Integer Set SourceRange = Range("B1:B10") Set DestinationRange = Range("A1:A10") For i = 1 To SourceRange.Count DestinationRange(i, 1).Value = Left(SourceRange(i, 1).Value, 2) Next i End Sub