And*_*kin 5 excel vba excel-vba
如何将对象作为Excel VBA中的引用传递给私有子?以下是我要做的事情:
Sub main()
Dim r As Range
Set r = Sheets("Sheet1").Range(Cells(1, 1), Cells(27, 27))
r.Select 'this works
select_cells (r) 'this doesn't work
End Sub
Private Sub select_cells(a As Range)
a.Select 'prompts Object Required error
End Sub
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)select_cells (r) 'this doesn't work
您不能使用括号将对象参数传递给过程.这样做:
select_cells r
Run Code Online (Sandbox Code Playgroud)
Call如果你真的想保留括号,可以使用过时的过时关键字.
您的代码中存在severla错误
不合格的范围参考指的是ActiveSheet.所以
Set r = Sheets("Sheet1").Range(Cells(1, 1), Cells(27, 27))
Run Code Online (Sandbox Code Playgroud)
如果Sheet1不活动将会出错.
r.Select如果Sheet1不活动将会出错.
select_cells (r)括号不正确.使用
select_cells r
Run Code Online (Sandbox Code Playgroud)a.Select如果Sheet1未激活,则在Private Sub中将出错.
这是一个修改过的版本
Sub main()
Dim r As Range
With Sheets("Sheet1")
Set r = .Range(.Cells(1, 1), .Cells(27, 27))
End With
Debug.Print r.Address ' for diagnostic purposes
select_cells r
End Sub
Private Sub select_cells(a As Range)
' Activate the worksheet first, so you can select a range on it
a.Worksheet.Select
a.Select
End Sub
Run Code Online (Sandbox Code Playgroud)
关于括号参数的注意事项
当a Sub或Function参数是非对象变量时,将参数括起来会覆盖ByRef/ ByValdefinition并传递参数ByVal
当a Sub或Function参数是对象变量时,将参数括起会导致将默认属性传递给Sub/ Function.在OP的情况下,这是r.Value导致类型不匹配的原因.
| 归档时间: |
|
| 查看次数: |
18070 次 |
| 最近记录: |