Excel VBA,工作表中的代码不工作

Excel VBA,工作表中的代码不工作,excel,vba,worksheet,Excel,Vba,Worksheet,sheet1中有以下代码(注意-此代码位于wroksheet对象中,而不是工作簿对象或模块中): 谁能告诉我为什么: 1.ActiveWorkbook.save在上面不起作用-它被卡在一个无限循环中; 2.为什么我不能一步一步地按F8来完成代码 我试图将ActiveWorkbook.save放在一个单独的模块中,然后从工作表中的代码调用该函数,但它也陷入了无限循环。您需要禁用事件以避免无限循环 Private Sub Worksheet_Change(ByVal Target As Range)

sheet1中有以下代码(注意-此代码位于wroksheet对象中,而不是工作簿对象或模块中):

谁能告诉我为什么: 1.ActiveWorkbook.save在上面不起作用-它被卡在一个无限循环中; 2.为什么我不能一步一步地按F8来完成代码


我试图将ActiveWorkbook.save放在一个单独的模块中,然后从工作表中的代码调用该函数,但它也陷入了无限循环。

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

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

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

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

通过更新工作表,再次触发更改事件,依此类推,以创建无限循环。您需要在执行更新之前使用
Application.EnableEvents=False禁用事件,然后在.Infinite循环之后重新打开事件;-)+1@TimWilliamsThnks对于快速回复,如果我将Application.EnableEvents=False放在单元格(r-1,7).Value=Now()之前,那么单元格(r-1,7).Value=Now()不起作用。如果取出ActiveWorkbook.save,我不会得到无限循环,那么这一行是否触发更改事件(保存文件是否构成更改事件)代码中是否有其他事件处理?在处理代码时,您可能无意中关闭了事件处理(设置是持久的),因此请尝试在VBE的即时窗格中运行
Application.EnableEvents=True
。或者在代码中放置一个断点,这样您就可以确保它确实被触发了。好的,我得到了应用程序。enableevents=true正在工作,但我回到了square1。现在我有application.enableevents=false就在ActiveWorkbook.save上面,然后我有application.enableevents=false就在它后面,但仍然陷入循环中。另外,我发现令人惊讶的是,如果我只是从上面的代码中去掉ActiveWorkbook.save这一行,它工作得很好,不会陷入循环,尽管从逻辑上说我应该期待它,因为只要执行单元格(r-1,7).Value=Now(),它就应该调用更改事件。但是它工作得很好。我已经完全按照给定的方式复制和粘贴了您的代码,我没有得到无限循环,但是单元格(target.row-1,7)。Value=Now()不工作您好,我打开了一个新工作簿,将您的代码完全复制到sheet 1对象并运行了它。它不再陷入一个循环,但它也什么都不做。事实上,如果我在代码中加了一个中断符,这个sub甚至不再被调用。有什么想法吗?非常感谢您的帮助。@user1894469如果您中途中断了此代码,您可能已经禁用了
事件,而没有重新启用它们。在VBE的
Immediate
窗口中,键入
Application.EnableEvents=True
,然后重试代码
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