アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのイベント処理にWorkbook_BeforeClose、Workbook_BeforeSaveってのがありますが、セルに変更を加えてウィンドウの×印をクリックすると、BeforeCloseが先に割り込まれ、次に”変更を保存しますか?”となりはいと答えると、最後にBeforeSaveが割り込まれ、保存して終わります。最後の最後の保存が終わったあとに処理がしたい場合行うことは不可能なのでしょうか?それとも、一番最後の保存という行為を強制中止させる方法ってあるのでしょうか?
どなたか?詳しい方教えていただけませんでしょうか?宜しくお願い致します。

A 回答 (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さんのご指導のおかげです有難う御座いました。今後とも宜しくお願い致します。

補足日時:2005/11/27 21:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!