ここでは暗闇の中で撮影していますが、モジュールの範囲内で(私が知ることができる)調光しています。新しい文書を開くと、これが範囲外になる可能性があります。ルーチン間でドキュメントを渡すのが最善の方法です。このような
何か:
' 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
私はあまりのOnTime使用していないので、doesntの上記の構文は、引数を渡すことができるようにする場合は、ここでプライベートドキュメント変数を使用したバージョンです。
' 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
これが役立ちます。私は主にExcel内でVBAのために働いていますので、私はここのマークから離れている場合は謝罪します。
編集:
私はそれを理解しました。何が起こっているのは、アクティブなドキュメントを新しいファイルとして保存しているセーブイベントが発生するたびに、新しいインスタンスを作成していないときです。テストは、あなたの最初の文書である場合、例えば:
テストオープン>イベント火災>テストTest2.docx(イベント火災なるコードがまだこの(何とかメモリに格納されているので> Test2を等
Test3はなります問題は、新しい文書を開くと何らかの形でこれをリフレッシュし、イベントがキャンセルされるということです。
簡単な回避策は、下記を参照してください。
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について私は非ストリングのパラメータを渡すことについてもわからないので、私はこれについて調べようとしますが、ここでは問題ではないと思います。 実際にDoSave Subはドキュメントを変更した後にもう起動しません。失敗したセービングではありません。 OnTimeが何とか完全にキャンセルされるようです。 – Mikk
私は単語内でテストルーチンを作成しましたが、問題を再現できません。私は同じ種類のループを設定し、5秒ごとにコンソールに出力しました。私がdidntした文書を開いて、保存し、閉じた後、何か問題があります。オープンした文書を上書きして保存して閉じてしまった場合は、問題はありませんでした。これにより、OnTimeメソッド内ではなく、コード内に存在しないものがあると私は信じています。 –
私の編集を参照してください。問題は、コードを含むファイルが上書きされているため、コードが実行されなくなったことです。ドキュメントの新しいインスタンスを作成するためのコードを追加し、デバッグするだけでうまくいきました。 –