2012-12-14 103 views
3

我在Sheet1中(注意 - 此代碼是在wroksheet對象,而不是工作簿對象或模塊),下面的代碼:Excel VBA中,在工作表中的代碼不工作

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

不能一步throught代碼中,我試圖把ActiveWorkbook.save在一個單獨的模塊,然後調用該函數從工作表中的代碼,而是陷入了一個無限循環的好。

+4

通過更新工作表,您再次觸發更改事件,從而創建無限循環。您需要在執行更新之前使用Application.EnableEvents = False來禁用事件,然後再次切換事件。 –

+0

無限循環;-) +1 @TimWilliams – bonCodigo

+0

爲快速回復的問題,如果我將Application.EnableEvents = False放在單元格(r - 1,7).Value = Now()之前,則單元格(r - 1,7 ).Value = Now()不起作用。我沒有得到無限循環,如果我拿出ActiveWorkbook.save,那麼這條線觸發更改事件(保存文件構成更改事件) – user1894469

回答

3

你需要禁用事件,以避免無限循環

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 
+0

我已經複製並粘貼完全按給定的代碼,我沒有得到無限循環,但然後單元格(target.row - 1,7).Value = Now() 不起作用 – user1894469

1

當你更新與當前日期的單元格,這是導致其被再次調用的事件代碼工作表更改事件無限循環,因爲引起。您需要禁用如下所示的事件:

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 
+0

您好,我打開了一個新的工作簿,將您的代碼完全複製到sheet 1對象並運行它。它不再陷入循環,但也沒有做任何事情。事實上,如果我在代碼中插入一箇中斷,這個子程序甚至不會被調用。有任何想法嗎?我非常感謝你的幫助。 – user1894469

+0

btw我用Excel 2003 – user1894469

+2

@ user1894469如果你打破了這個代碼的一部分,你可能已經禁用了'Events'並且不能重新啓用它們。在VBE的'Immediate'窗口中,鍵入'Application.EnableEvents = True',然後再次嘗試您的代碼 – brettdj

相關問題