【发布时间】:2012-12-15 07:59:20
【问题描述】:
我在 sheet1 中有以下代码(注意 - 此代码在工作表对象中,而不是工作簿对象或模块中):
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Integer
r = ActiveCell.Row
Cells(r - 1, 7).Value = Now()
ActiveWorkbook.save
End Sub
谁能告诉我原因: 1. ActiveWorkbook.save 在上面不起作用 - 它陷入了无限循环; 2. 为什么我不能按 F8 单步执行代码
我尝试将 ActiveWorkbook.save 放在一个单独的模块中,然后从工作表中的代码中调用该函数,但也陷入了无限循环。
【问题讨论】:
-
通过更新工作表,您再次触发更改事件,依此类推以创建无限循环。您需要在更新前使用
Application.EnableEvents = False禁用事件,然后再重新打开事件。 -
无限循环 ;-) +1 @TimWilliams
-
感谢快速回复,如果我将 Application.EnableEvents = False 放在 Cells(r - 1, 7).Value = Now() 之前,那么 Cells(r - 1, 7).Value = 现在()不起作用。如果我取出 ActiveWorkbook.save,我不会得到无限循环,所以这条线会触发更改事件(保存文件是否构成更改事件)
-
您的代码中是否还有其他事件处理?您可能在处理代码时无意中关闭了事件处理(该设置是持久的),因此请尝试在 VBE 的“立即”窗格中运行
Application.EnableEvents = True。或者在你的代码中放置一个断点,这样你就可以确定它确实被触发了。 -
好的,所以我得到了 application.enableevents = true 工作,但我又回到了 square1。现在我在 ActiveWorkbook.save 上方有 application.enableevents = false ,然后我有 application.enableevents = false ,但仍然卡在一个循环中。另外令我感到惊讶的是,如果我只是从上面的代码中取出 ActiveWorkbook.save 行,它工作正常,不会陷入循环中,尽管从逻辑上认为我应该期待它,因为只要 Cells(r - 1, 7).Value = Now() 执行它应该调用更改事件。但它工作正常。