[[20090805171059]] 『Auto_CloseとWorkbook_BeforeClose』(どんまい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Auto_CloseとWorkbook_BeforeClose』(どんまい)
 他人が作った物ですが、Auto_CloseとWorkbook_BeforeCloseに両方に同じ処理が
 だぶっていたりするものと、本当にここで良いのか?とわかりません。
 時におかしい動作をするのは、このせいかもはっきりしませんが、
 どなたか整理して下さると有り難いのですが、宜しくお願い致します。
 いろいろこっちか?あっちか?と動かしたのですが、どうもわかりませんので、
 お聞きします。
 Sub Auto_Close()
    On Error Resume Next
    Application.OnKey "^{w}"  'CTRL+Wでメニュー呼び出しを解除する。
    Application.OnKey "^{q}"  'CTRL+qでメニュー呼び出しを解除する。
    MyBar.Delete 'boxを閉じる。
    '標準モジュールexFuncのクローズ処理
    MyBar.Delete
    'ツールバー削除    
    Call RemoveToolBar 
    'ファイルの変更を保存しない
    Workbooks(Application.ThisWorkbook.Name).Close False   
 End Sub

 Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Workbooks("c_db.xls").Close False
    Workbooks("cr_db.xls").Close False
    Application.OnKey "^{w}"  'CTRL+Wでメニュー呼び出しを解除する。
    Application.OnKey "^{q}"  'CTRL+qでメニュー呼び出しを解除する。
    '/ メニューをリセット
    Call MenuBars(xlWorksheet).Reset 
    'ツールバー削除    
    Call RemoveToolBar 
 End Sub

 両方記述した経験がないので試してみると、BeforeCloseイベントが先に発生しますね!!
 私は、Auto_Closeは殆ど使用しない(Auto_Openは使いますが)ので、BeforeCloseイベントだけで

 Thisworkbookのモジュールに

  Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Workbooks("c_db.xls").Close False
    Workbooks("cr_db.xls").Close False
    Application.OnKey "^{w}"  'CTRL+Wでメニュー呼び出しを解除する。
    Application.OnKey "^{q}"  'CTRL+qでメニュー呼び出しを解除する。
    Call MenuBars(xlWorksheet).Reset
    Call RemoveToolBar
    call MyBar.Delete 'boxを閉じる。
    On Error GoTo 0
 End Sub

 Auto_Closeは削除

 ichinose


 この場合BeforeCloseイベントだけで良いと言うことですか
 大変すっきりしました。ありがとうございます。
 (どんまい)

 いちおう念のため。
 そのマクロ、個人用マクロブックやアドインに記されていると言う事はないでしょうか?
 その場合、「BeforeClose」は実行されずに「Auto_Close」だけ実行されるようです。
 マクロが記述されているのが個人用マクロブックやアドインでない場合は無視してください。
 (独覚)

xlstartにあります。ありがとうございます。
(どんまい)

 >そのマクロ、個人用マクロブックやアドインに記されていると言う事はないでしょうか?
 >その場合、「BeforeClose」は実行されずに「Auto_Close」だけ実行されるようです。
 へえ、面白いですねえ・・、Excel2002で検証してみると、
 アドインの場合は、BeforeCloseもAuto_Closeも実行されました。

 問題は、個人用マクロブックというやつですね!!
 つまり、Personal.xls という名前のブック

 *これ、xlstartというフォルダにあるないは、関係ありません。名前だけが問題です。

 このPersonal.Xlsと言うブック、作成時は、非表示ですよね?
 この状態で運用すると、Personal.xlsというブックを閉じるためには、Excel本体を閉じなければなりません。
 この時、Personal.xlsにあるBeforeCloseは、発生しません。
 但し、Personal.xlsを表示状態で運用し、このブック自体を閉じた場合には、BeforeCloseは発生します。
 (もっともこの場合でもExcel本体の終了では、Personal.xlsのBeforeCloseは発生しません)

 反対にPersonal.xlsという名前でなければ(例book.Xls)、そのブックがXlstartに配置されても、
 又、ブックが非表示でもそうでなくてもBeforeCloseは、発生しました。

 以上、Excel2002で簡易検証した結果ですが、皆さんも検証してみてください。

 ichinose@これが間違いないところなら、私的新発見

 


 追伸 前投稿の結果は、

 Thisworkbookのモジュールに

 Private Sub Workbook_BeforeClose(Cancel As Boolean)
    MsgBox "event ok"
 End Sub

 こんなコードでテストした結果です。
 ichinose


 すみません、アドインでBeforeCloseが実行されないのはExcel2000の場合でした。

 「[XL2000]アドインのBeforeCloseイベントがExcel終了時に実行されない」
http://support.microsoft.com/kb/414233/ja

 なお、もともとの情報元は下記です。

http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200908/09080024.txt

 (独覚)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.