如何使下面的代码工作?问题是当事件处理程序更改工作表上的任何一个值时,它会再次被触发。
代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dd As String
dd=0
If IsEmpty(Target) Then Exit Sub
If Target.Name Like "*.colName" Then
ActiveWorkbook.Names("CN\" & dd & "\CNA.").RefersToRange.Value = Range("CNS").Value
ActiveWorkbook.Names("CN\" & dd & "\CNJ.").RefersToRange.Value = Format(Now(),"MM/DD/YYYY")
End If
End Sub
请帮忙
答案 0 :(得分:2)
如果你有一个Worksheet_Change
事件处理程序本身改变工作表上的值,那么它将在该步骤再次触发工作表更改事件,再次运行事件处理程序,最后进入递归调用循环。这通常不是你想要发生的事情!
要避免这种情况,请在事件处理程序的开头将Application.EnableEvents
设置为False
。这可以防止您的代码触发任何其他事件:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error GoTo ErrHandler
'Your code here
Application.EnableEvents = True
Exit Sub
ErrHandler:
Application.EnableEvents = True
End Sub
请注意,您需要在事件处理程序的末尾将EnableEvents
设置回True
,并且在错误处理程序中执行此操作也是一种好习惯,因此即使将其设置为true也是如此子因任何原因失败。