Excel VBA将范围传递给函数产生424:对象必需

时间:2018-05-07 16:38:40

标签: excel vba

我正在尝试将范围传递给函数并获取运行时错误424:需要对象。

这是功能:

Function TextToCol(myRange As Range)

    myRange.TextToColumns Destination:=myRange, DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
    :=Array(1, 1), DecimalSeparator:=".", ThousandsSeparator:=",", _
    TrailingMinusNumbers:=True

End Function

以下是我尝试使用它的地方:

Sub Test()

    Dim wschar              As Worksheet
    Dim rng                 As Range

    Set wschar = ThisWorkbook.Worksheets("Charges")

    Set rng = wschar.Range("A1")

    TextToCol (rng)

End Sub

我已经尝试了几种不同的方式,并且无法弄清楚为什么它不会接受我的范围。

这是黄色突出显示的未通过的行:

TextToCol (rng)

1 个答案:

答案 0 :(得分:3)

删除TextToCol (rng)&中的括号。 祝你好运,进一步调试。

通常,认为函数应返回某些内容(Text,Value或Object),否则应使用Sub。在您的情况下,请考虑撰写Sub TextToCol(myRange As Range)

ByRefByVal在VBA中有些棘手,在这里你可以看到一些例子:

Public Sub TestMe()

    Dim var1, var2
    Dim var3, var4
    Dim var5, var6        
    var1 = Array(1, 1)
    var2 = Array(2, 1)
    var3 = Array(3, 1)
    var4 = Array(4, 1)
    var5 = Array(5, 1)
    var6 = Array(6, 1)

    increment1 (var1)
    increment2 (var2)
    increment1 var3
    increment2 var4
    var5 = increment1(var5)
    var6 = increment2(var6)

    Debug.Print var1(0)
    Debug.Print var2(0)
    Debug.Print var3(0)
    Debug.Print var4(0)
    Debug.Print var5(0)
    Debug.Print var6(0)

End Sub    

Public Function increment1(ByVal testValue As Variant) As Variant
    testValue(0) = testValue(0) + 100
    increment1 = testValue
End Function    
Public Function increment2(ByRef testValue As Variant) As Variant
    testValue(0) = testValue(0) + 100
    increment2 = testValue
End Function

印刷:

 1 
 2 
 3 
 104 
 105 
 106