我有一些触发变化的情况。他们正在按照我的意愿工作。如果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