对象必需错误Excel VBA

对象必需错误Excel VBA,excel,vba,Excel,Vba,我正在创建VBA应用程序,我有以下代码: 我不确定为什么会收到错误消息:GetForefort(previousCell)上的Object required错误。如果我传入目标,它就会工作 谢谢看来目标没有设置为某个对象的实例,该对象会给您带来错误。传入目标时,函数(参数)的参数设置为对象的实例。当您设置previouscell=target时,目标实际上需要是某个东西,否则您将得到exec错误 尝试设置previouscell=ActiveCell有两件事:首先,在调用getEffort作为

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


我不确定为什么会收到错误消息:
GetForefort(previousCell)上的Object required错误
。如果我传入
目标
,它就会工作


谢谢

看来目标没有设置为某个对象的实例,该对象会给您带来错误。传入目标时,函数(参数)的参数设置为对象的实例。当您设置previouscell=target时,目标实际上需要是某个东西,否则您将得到exec错误


尝试设置previouscell=ActiveCell有两件事:首先,在调用getEffort作为函数时,不需要使用
()
或包含某种返回值。您还需要确定是否希望它成为一个子/函数,现在您正在同时使用这两个函数。想必你把它变成潜艇了

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


而且,主程序永远不会在错误声明之前退出,因此它将始终弹出该消息框。尝试在错误标签之前添加
Exit Sub
,以避免总是出现空白消息框。

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

当你这么说的时候:

getEffort previousCell
getEffort (previousCell)
然后将
previousCell
范围对象传递到getEffort过程中。这是程序所期望的,因此它很高兴

当你这么说的时候:

getEffort previousCell
getEffort (previousCell)
previousCell
周围的括号导致VBA计算
previousCell
对象。VBA计算对象时,将返回该对象的默认属性。范围对象的默认属性是
.Value
,它是一个字符串

因此,对previousCell求值,并将字符串传递给getEffort。当然,getEffort需要一个范围对象,因此您会收到错误消息

Target
分配给
previousCell
这一事实是一种误导。您可能在切换到
previousCell
时引入了括号。如果你不相信我,试试这个:

getEffort (Target)

您将收到相同的错误消息。

私有函数是否应该是私有子函数,因为您不关心返回的值,并且私有函数以“END Sub”结尾?在调用getEffort时不要使用括号。如果使用括号,则代码将期望返回值(getEffort是否返回任何内容?)注意:如果在子名称之前键入
Call
,则可以使用Paranthese-
Call getEffort(previousCell)
有关其他信息,请参阅我对不同问题的回答: