【问题标题】:Excel VBA, code in worksheet not workingExcel VBA,工作表中的代码不起作用
【发布时间】: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() 执行它应该调用更改事件。但它工作正常。

标签: excel vba worksheet


【解决方案1】:

您需要禁用事件以避免无限循环

Private Sub Worksheet_Change(ByVal Target As Range)
application.enableevents=false
    Cells(target.row - 1, 7).Value = Now()
application.enableevents=true

ActiveWorkbook.save
End Sub

【讨论】:

  • 我已经完全按照给定的方式复制并粘贴了您的代码,我没有得到无限循环,但是 Cells(target.row - 1, 7).Value = Now() 不起作用
【解决方案2】:

导致无限循环是因为当您使用当前日期更新单元格时,这会导致工作表更改事件再次调用事件代码。您需要禁用事件,如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim r As Integer
r = ActiveCell.Row

Application.EnableEvents = False    
Cells(r - 1, 7).Value = Now()    
Application.EnableEvents = True    
ActiveWorkbook.Save

End Sub

【讨论】:

  • 您好,我打开了一个新工作簿并将您的代码完全复制到工作表 1 对象并运行它。它不再陷入循环,而且,它什么也没做。事实上,如果我在代码中打断,这个 sub 甚至都不会被调用。有任何想法吗?非常感谢您的帮助。
  • @user1894469 如果你在中途破坏了这段代码,你可能已经禁用了Events 而没有重新启用它们。在 VBE 的 Immediate 窗口中,输入 Application.EnableEvents = True 然后再次尝试您的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 2014-01-01
  • 1970-01-01
  • 2013-03-01
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多