首页 > 解决方案 > Excel VBA将范围传递给函数产生424:需要对象

问题描述

我正在尝试将范围传递给函数并得到运行时错误 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)

标签: excelvba

解决方案


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


一般来说,认为函数应该返回一些东西(文本、值或对象),否则Sub应该使用。在您的情况下,请考虑编写Sub TextToCol(myRange As Range).


ByRef并且ByVal在 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 

推荐阅读