对象必需的错误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
以避免总是出现空白消息框。