如何解决Worksheet_Change事件导致的无限循环

stevenjin 2010-11-17 07:19:32
Worksheet_Change事件导致无限循环。

在A列单元格输入内容后,在对应的那一行C列单元格写入当前时间。
接下来一句代码,也是在对应的那一行,但是在B列单元格写入数值。
如果不做最后的操作,也就是不在B列写入数值。那光标会进入到下一行。程序正常。
在加了最后这个操作之后,程序就死掉了。
分析可能是对单元格赋值时(最后那步操作),又触发了Worksheet_Change事件,结果导致无限循环。

请问有没有什么设置可以暂时屏蔽某事件的触发?




还请大家多多指教,谢谢啦。
...全文
2074 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kangmin04c48 2012-05-21
  • 打赏
  • 举报
回复
正遇到这个问题,回复看一下
hjxxcjh 2011-10-02
  • 打赏
  • 举报
回复 2
不想触发change事件运行结果,

Worksheet_Change事件导致无限循环。
Worksheet_Change事件中,只要有改写表中数值的操作就会再次他触发change事件,从而导致VBA程序陷入无限循环,死掉了。
请问有没有什么设置可以暂时屏蔽某事件的触发?

运行程序段之前,先作如下设置:
Application.EnableEvents = False '禁止运行过程中,改写结果时,再次触发change事件


程序段之后,再按如下设置,让VBA恢复捕捉事件的机制。

Application.EnableEvents = True
stevenjin 2010-11-17
  • 打赏
  • 举报
回复
是的。测试时,在N1单元格赋一个初始值。
Private Sub Worksheet_Change(ByVal Target As Range)

i = Range("N1").Value + 2
If Range("N1").Value <> "" Then
Cells(i - 1, 3) = Format(Now(), "MM-DD-H:MM.SS")
Cells(i - 1, 2) = 9//加上这个代码后会死掉
End If
End Sub
dbcontrols 2010-11-17
  • 打赏
  • 举报
回复
Cels,少 了 个 s

False才是禁止吧?
stevenjin 2010-11-17
  • 打赏
  • 举报
回复
Application.EnableEvents = True可以禁止触发吧?
dbcontrols 2010-11-17
  • 打赏
  • 举报
回复
Cels,少 了 个 s

[Quote=引用 5 楼 stevenjin 的回复:]
假设在A列输入内容后,回车换行。触发了事件:
Private sub Worksheet_Change(ByVal Target As Range)

//"N1"为当前行
i=Range("N1").value+2 If Range("N1").value<>"" then
cels(i-1,3)=Format(Now(),"MM-DD-H:MM.SS")
Cel(i-1……
[/Quote]
stevenjin 2010-11-17
  • 打赏
  • 举报
回复
假设在A列输入内容后,回车换行。触发了事件:
Private sub Worksheet_Change(ByVal Target As Range)

//"N1"为当前行
i=Range("N1").value+2 If Range("N1").value<>"" then
cels(i-1,3)=Format(Now(),"MM-DD-H:MM.SS")
Cel(i-1,2)=9 //加上这个代码后,EXCEL死掉
End if
End sub
dbcontrols 2010-11-17
  • 打赏
  • 举报
回复
change事件中判断change事件是怎么引起的
是你代码引起的就跳出去

[Quote=引用 2 楼 stevenjin 的回复:]
因为代码放在worksheets的change事件中,代码中又会对worksheets的内容进行了改变,又会触发change事件...如此生生不息?
[/Quote]
ZenRoi 2010-11-17
  • 打赏
  • 举报
回复
设置固定的触发区域,如:
If Not Intersect(Target,[A1:B5]) Is Nothing Then
……
End If
stevenjin 2010-11-17
  • 打赏
  • 举报
回复
因为代码放在worksheets的change事件中,代码中又会对worksheets的内容进行了改变,又会触发change事件...如此生生不息?
dbcontrols 2010-11-17
  • 打赏
  • 举报
回复
无代码无真相

2,502

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧