여기 어둡게 찍었지 만 모듈의 범위 내에서 (내가 말할 수있는 것부터) 문서를 디밍하고 있습니다. 새 문서를 열면 범위가 벗어날 수 있습니다. 루틴간에 문서를 전달하는 것이 가장 좋습니다. 이 같은
뭔가 : 나던 위의 구문은 인수가 전달 될 수 있도록, 그래서 만약 내가, OnTime 많이 사용하지 않은
' This will declare count within the scope of the module
Private count As Integer
Private Sub Document_Open()
count = 1
SaveTime ActiveDocument
End Sub
Sub SaveTime(doc as Document)
Application.OnTime When:=Now + TimeValue("00:00:15"), "'DoSave doc'"
End Sub
Sub DoSave(doc as Document)
doc.SaveAs2 "c:\test\testsave" & count & ".docx"
count = count + 1
SaveTime
End Sub
, 여기에 개인 문서 변수를 사용하여 버전입니다.
' This will declare count and doc within the scope of the module
Private count As Integer
Private doc as Document
Private Sub Document_Open()
count = 1
SaveTime
End Sub
Sub SaveTime()
Application.OnTime When:=Now + TimeValue("00:00:15"), "DoSave"
End Sub
Sub DoSave()
doc.SaveAs2 "c:\test\testsave" & count & ".docx"
count = count + 1
SaveTime
End Sub
이 정보가 도움이되기를 바랍니다. 나는 VBA를 위해 엑셀 내에서 주로 일하므로, 여기에서 벗어난다면 사과드립니다.
편집 :
알아 냈습니다. 저장 이벤트가 발생하면 활성 문서를 새 파일로 저장하지만 새 인스턴스를 만들지 않습니다. 예를 들어, 테스트는 다음 첫 번째 문서 인 경우
시험 엽니 다> 이벤트가 발생합니다> 테스트 Test2.docx (이벤트가 발생된다> 코드가 여전히 어떻게 든 (이 메모리에 저장되기 때문에 Test2를이 테스트 3 등
된다 내가 완전히 이해할 수는 없지만, 내가 알 수있는 것에서 무슨 일이 일어나고 있는지) 이벤트가 계속 발생합니다. 문제는 새 문서를 여는 것으로 어떻게 든 새로 고치고 이벤트가 취소된다는 것입니다.
간단한 해결 방법은 아래를 참조하십시오.
Option Explicit
Private doc As Document
Private count As Integer
Private Sub Document_Open()
count = 1
Set doc = ActiveDocument
SaveTime
End Sub
Sub SaveTime()
Application.OnTime Now + TimeValue("00:00:15"), "DoSave"
End Sub
Sub DoSave()
doc.Save
Application.Documents.Add doc.FullName
ActiveDocument.SaveAs2 "c:\test\testsave" & count & ".docx"
ActiveDocument.Close
count = count + 1
SaveTime
End Sub
문서의 새 인스턴스를 만들고이 새 인스턴스를 저장 한 다음 닫습니다. 이렇게하면 이전 인스턴스가 그대로 유지되고 실행됩니다.
나는 모두 의미가 있기를 바랍니다. 시피, 코드를 보관하는 문서가 더 이상 존재하지 않는데도 코드가 메모리에 남아있는 이유는 분명하지 않습니다.
도움 주셔서 감사합니다. Brandon, variant2를 사용해 보았지만 차이가 없었습니다. Variant1에 대해서 나는 nonstring 매개 변수를 전달하는 것에 대해 확신이 없으며, 이것에 대해 검색하려고 노력할 것입니다.하지만 여기서 문제는 무엇이 아닌가 생각합니다. 사실 DoSave Sub는 문서를 변경 한 후에 더 이상 트리거되지 않습니다. 어떻게 든 OnTime이 완전히 취소 된 것처럼 보입니다. – Mikk
단어로 테스트 루틴을 만들었으므로 문제를 재현 할 수 없습니다.나는 같은 종류의 루프를 설정하고 매 5 초마다 콘솔로 출력했다. 열기, 저장 및 문서를 닫은 후에는 문제가 없습니다. 나는 내가 열어 저장하고 닫은 문서를 덮어 쓰는 경우 어떤 문제도 가지지 않았다. 이로 인해 OnTime 메서드가 아니라 코드 내에 누락 된 것이 있다고 생각하게됩니다. –
내 편집을 참조하십시오. 문제는 코드가있는 파일을 덮어 쓰는 것이므로 코드가 더 이상 존재하지 않는다는 것입니다. 문서의 새 인스턴스를 만들고 디버깅하는 코드를 추가하여 잘 작동했습니다. –