在我的Excel工作表中,我有一个名为su_callLog
的单元格。
我的VBA代码是:
Private Sub su_callLogCopy_Click()
CopyCell (Range("su_callLog")) 'Error Here
End Sub
Sub CopyCell(cell As Range)
MsgBox cell.Value
End Sub
我正在尝试使用该功能来处理该单元格中的信息。即使当我尝试仅打印范围的内容时,也会出现VBA Run-time error '424' Object Required
错误。我是VBA的新手。请告诉我我在做错什么。
注意:MsgBox (Range("su_callLog"))
产生预期的结果。
答案 0 :(得分:3)
删除括号:
CopyCell Range("su_callLog")
如果使用括号,则将强制使用ByVal
作为参数。 Range()
是一个对象类型,它通过ByRef
传递。
答案 1 :(得分:1)
正如@Vityata正确指出的那样,您正在强迫
ByVal
,而您需要传递对范围的引用。
尽管这是正确的,CopyCell Range("su_callLog")
将产生期望的结果,但还有另一种方法可以实现:
在括号中您含蓄地正确引用了Range
因此,换句话说,您(在不知不觉中或不知不觉中)正确地传递了引用。
CopyCell (Sheets("Sheet1").Range("A1"))
您不仅可以保持所需的(尽管不是必需的)大括号语法,但它实际上可以工作。另外,良好的VBA编码做法是每次使用Sheet
对象时都使用特定的Range
可以这么说,你在这里用一块石头杀死了两只鸟