对象必需的错误Excel VBA

Rav*_*avi 5 excel vba

我正在创建一个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
Run Code Online (Sandbox Code Playgroud)

我不确定为什么会收到错误消息: Object required error at getEffort(previousCell).如果我通过Target,它的工作原理.

谢谢

mwo*_*e02 18

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

当你这样说:

getEffort previousCell
Run Code Online (Sandbox Code Playgroud)

然后,您将previousCell Range对象传递给getEffort过程.这就是程序所期望的,所以很高兴.

当你这样说:

getEffort (previousCell)
Run Code Online (Sandbox Code Playgroud)

周围的括号previousCell原因VBA来评估previousCell对象.当VBA 评估对象时,它返回该对象的默认属性.Range对象的默认属性.Value是字符串.

因此,将评估previousCell并将字符串传递给getEffort.当然getEffort期待一个Range对象,因此您会收到错误消息.

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

getEffort (Target)
Run Code Online (Sandbox Code Playgroud)

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

  • 有关其他信息,请参阅我对其他问题的回答:[ByRef似乎接收到值而不是VBA 6.0中的引用](http://stackoverflow.com/a/4877030/154439) (2认同)

d4v*_*0rk 0

看起来目标没有设置为给你错误的对象的实例。当您传入目标时,函数 function(argument) 的参数将设置为对象的实例。当您设置 previouscell = target 时,目标实际上需要是某个东西,否则您将收到执行错误。

尝试设置 previouscell = ActiveCell