プロが教えるわが家の防犯対策術!

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

A 回答 (4件)

普通に考えれば質問者のコードで上手くいきそうですが


hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

この回答への補足

できました。
ありがとうございました。

追加で質問なんですがよろしいでしょうか?

- 他のエクセルブックが開いている場合、
自分自身は閉じるけどアプリケーションは終了しない -
という感じでコーディングするにはどうすればよいでしょうか?

よろしくお願いします。

補足日時:2007/09/20 11:35
    • good
    • 9

>- 他のエクセルブックが開いている場合、


自分自身は閉じるけどアプリケーションは終了しない -

Workbooks.Count で開いているブックの数を得る事ができます。
ただし、個人用マクロブック等見えないブックが開いている場合もカウントされるため、こ使用環境によってはのチェック方法だけでは不十分になるので、正しく動作しない可能性もあります。


If Workbooks.Count = 1 Then
Application.Quit
End If
ThisWorkbook.Close
    • good
    • 12
この回答へのお礼

ご回答、ありがとうございます。

バッチリ、できました!
懸念されている(ご心配いただいている)
>ただし、個人用マクロブック等見えないブックが開いている場合もカウントされるため、こ使用環境によってはのチェック方法だけでは不十分になるので、正しく動作しない可能性もあります。
↑こちらですが、実際に使用するのは開発などまったく行わない事務員なので心配はないかと思います。

ありがとうございました。

お礼日時:2007/09/20 15:41

>自分自身は閉じるけどアプリケーションは終了しない



と、いうことは、起動しているエクセルはひとつで
その作業領域の中で複数のブックが開いている状態で
その中のコードが書いてあるブックのみを閉じたいということですよね。

であれば、

  ThisWorkBook.Close

のみでOKです。
    • good
    • 5
この回答へのお礼

再度ご回答いただき、ありがとうございます。

実際に使用するのはマクロを組む等開発などを行わない事務員で、
使用時にいくつエクセルブックを開いているかわからない、指定もできないわけで……。

そういう意味で開いているブックの数で
・アプリケーション自体を閉じるのか
・エクセルブック(自分自身)を閉じるだけにするのか
処理を分岐させたかったのです。

本当にありがとうございました。

お礼日時:2007/09/20 15:40

>ThisWorkbook.Close



実際には、この部分でマクロの実行が終わって仕舞う(コードが書かれたブックが閉じる=コードが書かれたブックが消滅)ので、それ以降のコードは実行されません。

Application.Quit を実行する事で、エクセル(本体)を終了出来ます。
    • good
    • 0
この回答へのお礼

お早いご回答、ありがとうございました。

できました!助かりました。

お礼日時:2007/09/20 11:34

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A