VBA左功能问题

时间:2016-07-21 07:22:33

标签: excel vba

我尝试使用左边的函数,就像在这个基本的示例代码中一样,它给了我编译错误,但是当我使用Right函数而不是Left时它可以找出原因。

示例代码:

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

2 个答案:

答案 0 :(得分:2)

Left可以解决(按此顺序):

  1. 名为Left
  2. 的本地变量
  3. 模块范围的变量或同一模块中的成员
  4. 基类中的成员(例如表单模块中的UserForm.Left
  5. 同一项目的标准模块中的公共/全球成员
  6. VBA标准库中的公共/全局成员或任何引用的项目(按项目引用对话框中指定的顺序)
  7. 第一场比赛是使用的比赛,无论其签名如何

    IntelliSense showing how Left resolves to a same-module Left function even with a completely different signature

    此功能的标识符隐藏内置的标识符。要访问内置Left功能,您需要立即对其进行限定:

    Debug.Print VBA.Strings.Left(...)
    

    略有不相关,但请注意VBA.Strings.Left返回隐式Variant

    enter image description here

    它的小型强力型小兄弟返回一个明确的String

    enter image description here

    因此避免了隐式类型转换的成本;每当Left$参数永远不能为Left时,首选StringNull - 两个函数非常相似,除此之外:

    Debug.Print Left(Null, 1)  ' outputs Null
    Debug.Print Left$(Null, 1) ' raises runtime error 94 - Invalid use of Null
    

    除非您正在处理,否则您可能永远不会在VBA中遇到Null

答案 1 :(得分:0)

这对我来说没有编译错误:

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