程序执行顺序不同。在代码(行)上下跳动:下面的代码是“Code-Sheet”/ Worksheet_Change-event,而不是“模块”

时间:2017-06-06 14:00:07

标签: excel-vba vba excel

在第一行设置断点,然后逐步执行(F8),可以注意到程序不遵循上下序列,而是进入IF块,然后离开IF块,重新输入IF退出后阻止(击中End Sub后)。有人可以解释一下吗?

Private Sub Worksheet_Change(ByVal Tgt As Range)
  If Not IsNumeric(Tgt.Value) Then
    MsgBox "Numbers Only"
    Tgt.ClearContents
    Tgt.Activate
  End If
End Sub

1 个答案:

答案 0 :(得分:0)

简单。您的代码位于Change事件中,每次更改任何单元格后都会触发该事件。但代码本身会进行更改,因此会触发对自身的调用。 为确保更改事件所做的更改不会触发更改事件:-),请使用以下命令启动更改事件:

Application.EnableEvents = False

确保添加

Application.EnableEvents = True

就在End Sub line的上方。