为什么我会从此代码中收到VBA运行时错误“ 424”对象必需错误?

时间:2018-08-07 11:11:20

标签: excel vba

在我的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"))产生预期的结果。

2 个答案:

答案 0 :(得分:3)

删除括号:

CopyCell Range("su_callLog") 

如果使用括号,则将强制使用ByVal作为参数。 Range()是一个对象类型,它通过ByRef传递。

ByVal vs ByRef VBA

答案 1 :(得分:1)

  

正如@Vityata正确指出的那样,您正在强迫ByVal   ,而您需要传递对范围的引用。

尽管这是正确的,CopyCell Range("su_callLog")将产生期望的结果,但还有另一种方法可以实现:

在括号中您含蓄地正确引用了Range
因此,换句话说,您(在不知不觉中或不知不觉中)正确地传递了引用。


 CopyCell (Sheets("Sheet1").Range("A1"))

您不仅可以保持所需的(尽管不是必需的)大括号语法,但它实际上可以工作。另外,良好的VBA编码做法是每次使用Sheet对象时都使用特定的Range

可以这么说,你在这里用一块石头杀死了两只鸟