- ベストアンサー
【Excel VBA】マクロでExcel自体を終了させたい
環境:WindowsXP、Excel2003 マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。 ThisWorkbook.Close ExcObj.Quit Application.Quit どこか悪いところはありますでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
普通に考えれば質問者のコードで上手くいきそうですが hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので Application.QuitをThisWorkBook.Closeの前にもってこないといけません。 Application.Quitはそれがあるプロシージャのコードが全て終わるまで その実行を保留するちょと特別動作をします。 '------------------------------------- Application.Quit ThisWorkbook.Close '-------------------------------------
その他の回答 (3)
- hana-hana3
- ベストアンサー率31% (4940/15541)
>- 他のエクセルブックが開いている場合、 自分自身は閉じるけどアプリケーションは終了しない - Workbooks.Count で開いているブックの数を得る事ができます。 ただし、個人用マクロブック等見えないブックが開いている場合もカウントされるため、こ使用環境によってはのチェック方法だけでは不十分になるので、正しく動作しない可能性もあります。 If Workbooks.Count = 1 Then Application.Quit End If ThisWorkbook.Close
お礼
ご回答、ありがとうございます。 バッチリ、できました! 懸念されている(ご心配いただいている) >ただし、個人用マクロブック等見えないブックが開いている場合もカウントされるため、こ使用環境によってはのチェック方法だけでは不十分になるので、正しく動作しない可能性もあります。 ↑こちらですが、実際に使用するのは開発などまったく行わない事務員なので心配はないかと思います。 ありがとうございました。
- onlyrom
- ベストアンサー率59% (228/384)
>自分自身は閉じるけどアプリケーションは終了しない と、いうことは、起動しているエクセルはひとつで その作業領域の中で複数のブックが開いている状態で その中のコードが書いてあるブックのみを閉じたいということですよね。 であれば、 ThisWorkBook.Close のみでOKです。
お礼
再度ご回答いただき、ありがとうございます。 実際に使用するのはマクロを組む等開発などを行わない事務員で、 使用時にいくつエクセルブックを開いているかわからない、指定もできないわけで……。 そういう意味で開いているブックの数で ・アプリケーション自体を閉じるのか ・エクセルブック(自分自身)を閉じるだけにするのか 処理を分岐させたかったのです。 本当にありがとうございました。
- hana-hana3
- ベストアンサー率31% (4940/15541)
>ThisWorkbook.Close 実際には、この部分でマクロの実行が終わって仕舞う(コードが書かれたブックが閉じる=コードが書かれたブックが消滅)ので、それ以降のコードは実行されません。 Application.Quit を実行する事で、エクセル(本体)を終了出来ます。
お礼
お早いご回答、ありがとうございました。 できました!助かりました。
補足
できました。 ありがとうございました。 追加で質問なんですがよろしいでしょうか? - 他のエクセルブックが開いている場合、 自分自身は閉じるけどアプリケーションは終了しない - という感じでコーディングするにはどうすればよいでしょうか? よろしくお願いします。