我有一个清除单元格的button。 excel vba我不希望它触发更改事件的代码

我有几个触发变化的情况。 他们正在按我的意愿工作。 如果D21是空白,则不会有任何反应。 如果有什么东西的话会popup一个消息框。

问题是,我也有一个清晰的单元格button,当我不想让消息框出现时触发D21上的更改事件。 只要清除所有的细胞。 这里是我写的案例。

Private Sub Worksheet_Change(ByVal Target As range) Application.EnableEvents = False '<--| disable events handling On Error GoTo ErrorHandler '<--| be sure to catch any error and enable events handling back Select Case Target.Address Case "$D$4" Me.Unprotect 'Recalculate Downpayment D5 if Purchase Price is changed range("D5").Value = (range("D4").Value * range("B5").Value) / 100 Debug.Print "New value for D5 Downpayment "; range("D5").Value range("D6").Value = (range("D4").Value - range("D5").Value) ' This cell won't activate when locked and sheet protected Debug.Print "D6 New Mortgage " & range("D6").Value Me.Protect If range("D21") <> 0 Then MsgBox "The Total Mortgaged Amount has changed, The Mortgage Payment Amount (Cell D21) is no longer valid. Please Re-calculate Mortgage with New Amount" End If 

这里是我如何写清楚的button

 Sub ClearTEst() Dim ws As Worksheet Dim rRng As range Dim rCell As range Dim rRows As range Set rRng = Sheet1.range("A1:D28") For Each rCell In rRng.Cells If rCell.Locked = False Then If rCell <> range("E21") Then range("B10") = 5 range("B14") = 0.4 range("B15") = 8 range("B16") = 0.4 range("B17") = 5 range("B18") = 5 ' rCell.ClearContents rCell = 0 End If End If Next rCell End Sub 

有什么办法可以捕捉工作表更改是由清除button触发的,而不是触发调用消息的情况。 首先我想,如果我可以添加一个条件,如果范围(“D21”)触发清除button,然后没有消息,如果不是然后消息。

希望这是有道理的。 谢谢

为了禁止触发事件的代码,您需要在代码的其余部分之前添加以下代码:

 Application.EnableEvents = False ' ////////////////////////////// ' /// REST OF YOUR CODE HERE /// ' ////////////////////////////// Application.EnableEvents = True End Sub