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

时间:2016-12-15 20:41:47

标签: excel vba excel-vba

我有几个案例会引发变革。 他们按我的意愿工作。如果D21为空白则没有任何反应。如果有任何内容,则会出现一个消息框。等等。

问题是我还有一个清晰的单元格按钮,当我不希望消息框出现时,它会在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范围(&#34; D21&#34;)中添加一个条件,那么就没有消息,如果没有则消息。

希望这是有道理的。感谢

1 个答案:

答案 0 :(得分:1)

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

Application.EnableEvents = False

' //////////////////////////////
' /// REST OF YOUR CODE HERE ///
' //////////////////////////////

Application.EnableEvents = True
End Sub