对象必需的错误Excel VBA

我正在创build一个VBA应用程序,我有以下代码:


Dim previousCell As range Private Sub Worksheet_SelectionChange(ByVal target As range) Application.EnableEvents = False On Error GoTo ws_exit: Set previousCell = target getEffort (previousCell) '**Here i get object required** ws_exit: Application.EnableEvents = True MsgBox Err.Description End Sub Private Function getEffort(ByVal cell As range) ' do soemthing End Sub 

我不知道为什么我得到的错误消息: Object required error at getEffort(previousCell) 。 如果我通过Target ,它的工作。

谢谢

正如其他人所说,问题在于括号。 没有人充分解释的是为什么是括号。

当你这样说的时候:

 getEffort previousCell 

然后你将previousCell Range对象传递给getEffort过程。 这是程序所期望的,所以它是快乐的。

当你这样说的时候:

 getEffort (previousCell) 

previousCell周围的圆括号使VBA 评估 previousCell对象。 当VBA 评估一个对象时,它将返回该对象的默认属性。 Range对象的默认属性是.Value ,它是一个string。

所以前一个Cell被评估,一个string被传递给getEffort。 当然getEffort需要一个Range对象,所以你会收到错误信息。

您将Target分配给previousCell的事实是一个红色的鲱鱼。 切换到previousCell时,可能会引入括号。 如果你不相信我,试试这个:

 getEffort (Target) 

你会得到相同的错误信息。

它看起来像目标没有设置为一个对象的实例给你的错误。 当你传入目标时,函数function(argument)的参数被设置为一个对象的一个​​实例。 当你设置previouscell = target target实际上需要的东西,否则你会得到exec错误。

尝试设置previouscell = ActiveCell

有两件事情:首先,当调用getEffort作为函数时,您不需要使用()或包含某种返回值。 你也需要确定你是否想成为一个子/function,现在你正在使用这两个。 大概你是在做一个sub?

 Dim previousCell As range Private Sub Worksheet_SelectionChange(ByVal target As range) Application.EnableEvents = False On Error GoTo ws_exit: Set previousCell = target getEffort previousCell '**Here i get object required** 'or... call getEffort(previousCell) 'add this too.. 'exit sub ws_exit: Application.EnableEvents = True MsgBox Err.Description End Sub Private sub getEffort(ByVal cell As range) ' do soemthing End sub 

另外,你的主程序在你的错误语句之前永远不会退出,所以它总会popup那个消息框。 尝试在错误标签之前添加Exit Sub以避免总是出现空白消息框。