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



我有一些触发变化的情况。他们正在按照我的意愿工作。如果D21是空白的,那么什么也不会发生。如果有任何内容,则会出现一个消息框。ETC。

问题在于,当我不希望消息框出现时,我还拥有一个清晰的单元按钮,该按钮会触发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

这是我写出清晰按钮的方式

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

是否有任何方法可以捕获工作表更改是由"清除"按钮触发的,而不是触发拨打消息的情况。首先,我在想,如果我可以在清除按钮触发的if范围(" d21")中添加条件,则没有消息,如果不是消息,请发消息。

希望这是有道理的。谢谢

为了使您的代码免于触发事件,您需要在其余代码之前添加以下代码:

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

最新更新