- ベストアンサー
エクセルVBAのイベント処理のタイミングについて
エクセルのイベント処理にWorkbook_BeforeClose、Workbook_BeforeSaveってのがありますが、セルに変更を加えてウィンドウの×印をクリックすると、BeforeCloseが先に割り込まれ、次に”変更を保存しますか?”となりはいと答えると、最後にBeforeSaveが割り込まれ、保存して終わります。最後の最後の保存が終わったあとに処理がしたい場合行うことは不可能なのでしょうか?それとも、一番最後の保存という行為を強制中止させる方法ってあるのでしょうか? どなたか?詳しい方教えていただけませんでしょうか?宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。Wendy02です。 具体的なコードをみていないので、Workbook_BeforeClose、Workbook_BeforeSave が、両方の依存の関係が、良く分りませんが、Workbook_BeforeSave イベントというのは、本来は、あまり、直接はの終了イベントとは関係がないものだと思います。 このようにすれば、Closeイベントからは、逃げられると思います。 ' Private Sub Workbook_BeforeClose(Cancel As Boolean) If ThisWorkbook.Saved = False Then If MsgBox("保存しますか?", vbOKCancel) = vbOK Then ThisWorkbook.Save End If End If If MsgBox("本当に終了してよろしいですか?", vbOKCancel) = vbCancel Then Cancel = True End If End Sub
補足
いつもいつも丁寧なご指導有難う御座います。 実は、もうひとつの質問(単なる関数でありましたが!)と対のないようでして、ディレクトリーに記載されているタイムスタンプをバージョン表記にしたいと考えています。(古典的名手法ですが・・?)開いてるときにタイムスタンプを更新するのではなく、閉じた後にタイムスタンプを更新したく考えています。 で、今回のご指導の内容ですが、また納得です。セルの内容を変更したあとに、Workbook_BeforeCloseにMsgboxで仮に停止させ、Msgboxを閉じると保存されてしまうので、タイムスタンプを変更しても上書きされてしまうと考え、アフターイベントに変わるものがないか?と思いの質問でした。確かに、ビフォアーで一度保存すればサイド保存されることはない!当たり前というか?なんで気がつかないの?と言われそうなレベルの質問でした。これも、お手を煩わせて申し訳ありませんでした。Saved = Trueが、変更ありのフラッグだったんですね?エクセルを普通に使っていると何気ないこともVBAを勉強し始めると覚えること、感動することが多くて毎日が短い気がします。それもこれも、 Wendy02さんのご指導のおかげです有難う御座いました。今後とも宜しくお願い致します。