vba - 当将 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
解决方案
调用过程时不需要使用 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
推荐阅读
- vba - 如何使用另一个宏编辑“此工作簿”宏
- swt - 在不最小化其他 Shell 的情况下最小化 Shell
- java - 在 SauceLabs 上运行 Selenium 测试时,在某些情况下出现“无效消息:错误内部服务器错误”
- mongodb - 如何将本地 Mongo 数据库连接到 docker
- bash - 删除所有少于 X 个文件的子文件夹
- haskell - 为什么“++”函数比“:”贵很多?
- data-visualization - 可视化数据,跟踪特定 SD 值
- javascript - 组件不再渲染 React JS
- android - 尝试将文件夹内容转换为 zip 文件时出现 IndexOutOfBounds 异常
- amazon-web-services - 如何获取 AWS JavaScript SDK 调用的响应标头?