2012-12-14 8 views
3

I가 시트 1 (참고 -이 코드는 wroksheet 오브젝트의 통합 문서 객체 또는 모듈 아닙니다)에 다음 코드 :엑셀 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 키를 눌러 코드를 단계별로 실행할 수없는 이유는 무엇입니까?

ActiveWorkbook.save를 별도의 모듈에 넣은 다음 해당 함수를 워크 시트의 코드에서 호출하려고 시도했지만 무한 루프로 고정되어 있습니다. 잘.

+4

워크 시트를 업데이트하면 변경 이벤트가 다시 트리거되어 무한 루프가 생성됩니다. 업데이트를하기 바로 전에'Application.EnableEvents = False'를 사용하여 이벤트를 비활성화 한 다음, 이벤트를 다시 켜야합니다. –

+0

무한 반복 ;-) +1 @TimWilliams – bonCodigo

+0

빠른 답장을 위해 Thnks, 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

코드를 정확히 복사하고 붙여 넣었으므로 무한 루프가 발생하지 않지만 Cells (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

안녕하세요, 새 통합 문서를 열었습니다. 코드를 시트 1 객체에 정확히 복사하고 실행했습니다. 그것은 더 이상 루프에 갇히지 않는다. 그러나 또한 아무것도하지 않는다. 사실 코드에 중단을 넣으면이 하위 코드는 더 이상 호출되지 않습니다. 어떤 아이디어? 도와 주셔서 감사합니다. – user1894469

+0

btw Excel 2003을 사용 중입니다. – user1894469

+2

@ user1894469이 코드를 부분적으로 위반 한 경우 '이벤트'를 비활성화하고 다시 사용하지 않도록 설정할 수 있습니다. VBE의'Immediate' 윈도우에'Application.EnableEvents = True'를 입력하고 코드를 다시 시도하십시오. – brettdj