按下按钮时VBA事件会引发错误?

时间:2012-06-13 15:32:57

标签: excel vba excel-vba

当我点击工作表上的按钮时,会调用以下事件。

我收到错误'Type mismatch'

我怀疑如果事件是由按下按钮引起的话,我需要另一个if语句来停止评估原始的IF?

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target = Range("D4") Then   'Error is here

    End If

End Sub

2 个答案:

答案 0 :(得分:5)

If Target = Range("D4") Then

等同于此

If Target.Value = Range("D4").Value Then

这显然不是你想要的。如果Target.ValueRange("D4").Value的类型不同,您可能会收到您所描述的错误。

你想要的是这个:

If Not Intersect(Target, Range("D4")) Is Nothing Then

编辑我刚设法重现您的错误。如果Target范围与Range("D4")的大小不同,即跨越多个单元格,则会发生这种情况。正如@Dick Kusleiska指出的那样,如果其中一个是错误值,也会发生这种情况。也许这也是由其他事情引发的,我不知道。无论如何,重点是,你的If条件错了!

答案 1 :(得分:3)

试试这个

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Whoa
    Application.EnableEvents = False

    If Not Intersect(Target, Range("D4")) Is Nothing Then

    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

修改

我还建议使用错误处理并将.EnableEvents设置为false以避免和可能的无限循环:)