[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『他のワークブックが開いているかどうかを取得』(ノモ)
いつもお世話になります。
あるワークブックの終了処理で、
ActiveWorkbook.Close
で終了すると、エクセルそのものは起動したままで灰色の画面が残ります。
Application.Quit
で終了すると、他のワークブックが開いていても終了処理に入ります。
他のワークブックが開いていなければ Quit で、他に開いていれば Close で 終了したいのですが、「他のワークブックが開いていなければ」というような 判断はどうすればいいのでしょうか。
Excel2003 です。
Personal.xls が無い条件であれば workbooks.Count が1なら自ブックだけしかないという判定でOKだと思います。
Personalがあるのであれば、もしくは解らないのであれば
Dim wb As Workbook, flg As Boolean For Each wb In Workbooks If wb.Name <> ActiveWorkbook.Name Then flg = True Exit For End If Next wb If flg Then ActiveWorkbook.Close Else Application.Quit ActiveWorkbook.Close End If
のような感じでどうでしょうか? (momo)
Personal.xls は、自分のPCではあるのですが、他のPCにコピーして使う こともあるので、マクロを使うことにしました。
教えていただいたマクロで、Personal.xls があるとうまくいかなかったので、
Dim wb As Workbook, flg As Boolean For Each wb In Workbooks If wb.NAME <> ActiveWorkbook.NAME And wb.NAME <> "PERSONAL.XLS" Then flg = True Exit For End If Next wb
If flg Then ActiveWorkbook.Close Else Application.Quit ' ActiveWorkbook.Close End If
とするとうまくいくようです。どうもありがとうございました。
※最後の ActiveWorkbook.Close はなくても、とりあえずうまくいくように 見えるのですが、これを省くと何か具合の悪いことが起きる可能性があるの でしょうか?
(ノモ)
>教えていただいたマクロで、Personal.xls があるとうまくいかなかったので、 テストしてないとこれですね・・・すみません。 掲示のとおりで大丈夫そうですね。
>これを省くと何か具合の悪いことが起きる可能性があるのでしょうか? 原因は忘れましたが、以前正常に終了しない事があって習慣的に書いています。 正常に動いているのであれば特に問題は無いんじゃないでしょうか? 検証していませんが・・・
(momo)
>以前正常に終了しない事があって習慣的に書いています。
そういうことでしたか。ということなら、残しておくことにします。 どうもありがとうございました。
(ノモ)
解決後ですが、Application.Quitついて
> Application.Quit > ActiveWorkbook.Close
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_060.html
ここで解説されていますので 参考にしてください。
ichinose
あ、そんな感じの事でしたね。 ichinoseさんフォローありがとうございます。 (momo)
やはりちゃんとした理由があったのですね。Quit のところでそのまま終了 するのではない、ということは知りませんでした。
これで安心してコードに Quit と Close を書いておくことができます。 ichinoseさん、momoさん、ありがとうございました。
(ノモ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.