当我点击工作表上的按钮时,会调用以下事件。
我收到错误'Type mismatch'
我怀疑如果事件是由按下按钮引起的话,我需要另一个if语句来停止评估原始的IF?
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("D4") Then 'Error is here
End If
End Sub
答案 0 :(得分: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
条件错了!
答案 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以避免和可能的无限循环:)