4

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

我收到错误“类型不匹配”

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

Private Sub Worksheet_Change(ByVal Target As Range)

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

    End If

End Sub
4

2 回答 2

5

If Target = Range("D4") Then

相当于这个

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

这显然不是你想要的。如果Target.Value碰巧与Range("D4").Value.

你想要的是这样的:

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

编辑我只是设法重现您的错误。如果Target范围的大小不同于Range("D4")即跨越多个单元格,则会发生这种情况。正如@Dick Kusleiska 所指出的,如果两者之一是错误值,也会发生这种情况。也许它也是由其他事情触发的,我不知道。总之,重点是,你的If条件不对!

于 2012-06-13T15:58:12.270 回答
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 以避免和可能的无限循环:)

于 2012-06-13T15:54:38.307 回答