首页 > 解决方案 > 当将 Range 对象作为单个参数传递给函数时会引发错误

问题描述

我只是想知道这里发生了什么以及我做错了什么?

情况1:

当仅传递 Range 对象作为参数时抛出 - Object Require Error

示例代码:

Dim ws As Worksheet
Dim rng As Range

Set ws = Worksheets("Project")
ws.Activate

Set rng = Range("A1:A12")
passRange(rng)   ' Throws Runtime error 
End Sub

Function passRange(rnge As Range)
MsgBox rnge.count
End Function

案例2,

当传递 2 个参数时,它工作得很好。

示例代码:

Dim ws As Worksheet
Dim rng As Range
Dim IL As Long
IL = 12

Set ws = Worksheets("Project")
ws.Activate

Set rng = Range("A1:A12")
Call passRange(rng, IL)
End Sub

Function passRange(rnge As Range, IL As Long)
MsgBox rnge.count
End Function

标签: vbaexcel

解决方案


调用过程时不需要使用 Call 关键字。但是,如果您使用 Call 关键字调用需要参数的过程,argumentlist 必须用括号括起来。如果在过程调用中省略 Call 关键字,则还必须省略参数列表周围的括号。

这里

示例代码如何使用 ist

Sub testSub(rg As Range)

End Sub

Sub TestItA()

Dim rg As Range
    Set rg = Range("A1")

    testSub rg
    Call testSub(rg)
    testSub (rg)  'will throw a run time error
    call testsub  rg    ' will even not compile

End Sub


Function testFunc(rg As Range)

End Function

Sub TestIt()
Dim rg As Range
    Set rg = Range("A1")

    testFunc rg
    Call testFunc(rg)
    testFunc (rg)  'will throw a run time error
    call testfunc rg    ' will even not compile

End Sub

推荐阅读