按下button时VBA事件抛出错误?

当我点击工作表上的一个button时,会调用下面的事件。

我得到错误“types不匹配”

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

Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("D4") Then 'Error is here End If End Sub 

这个

 If Target = Range("D4") Then 

相当于这个

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

这显然不是你想要的。 如果Target.ValueRange("D4").Valuetypes不同,那么您可能会得到您描述的错误。

你想要的是这样的:

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

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

尝试这个

 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 

编辑

我也build议使用error handling,并将.EnableEvents设置为false以避免和可能无休止的循环:)