みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL VBA フォームクローズと同時にアプリも終了したい

いつもお世話になっております。
Excel VBAでフォームをつくりました。
下記のように記述し、マクロ起動と同時にフォームだけ見えるようにしました。

Private Sub Workbook_Open()
Application.Visible = False
メニューフォーム.Show
End Sub

しかし、フォームの右上にある×ボタンで終了すると
フォームは閉じますが、Excel自体は起動したままになってしまっています。
フォーム終了と同時にアプリも終了させたい時はどうすればよいか教えてください。
よろしくお願いします。

投稿日時 - 2006-03-16 11:17:11

QNo.2032315

困ってます

質問者が選んだベストアンサー

こんにちは。

まあ、環境それぞれ、いろいろありますから、タスクマネージャで確認していただくしかありませんが、正直なところ、Userformにいきなり立ち上げるほうも、また、そのまま終了するほうも、ここのカテゴリで、トラブルの報告が出ている限りは、私としては、安易には正答としては出来ませんが、私としては、複数のブックに対しては、お勧めできません。

一応、訂正しておきます。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 If ThisWorkbook.Saved = False Then
  ThisWorkbook.Save
 End If
 DoEvents
 ThisWorkbook.Close False 'False に換えておきます。
 Application.Quit
End Sub


なお、
[XL2002]保存確認メッセージを表示せずにExcelを終了する方法
の中の、以下の方法が、UserFormを使った、私の環境では、場合によって、ハングを起こします。そのために、もう一度、Close メソッドを使っています。

 Sub SaveFileQuitExcel()
   Dim wbook As Workbook
   For Each wbook In Workbooks
     wbook.Save
   Next wbook
   Application.Quit
 End Sub

投稿日時 - 2006-03-16 13:14:57

ANo.7

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.6

#1のmshr1962です。マクロでいいなら下記サポートをご覧ください。
保存確認メッセージを表示せずにExcelを終了する方法
http://support.microsoft.com/kb/408045/ja

投稿日時 - 2006-03-16 12:50:46

ANo.5

>全て上書き保存で終了するという設定は可能でしょうか?
For Each w In Application.Workbooks
w.Save
Next w
というような感じで全てのブックを保存できると思います。
ちなみに、ウチで試してみたときには、修正が生じていない時には、残っている(常駐している)ということはありませんでした。
タスクマネージャーで確認。(冴子さんも去っていったし・)

投稿日時 - 2006-03-16 12:42:13

ANo.4

>全て上書き保存で終了するという設定・・・

開いている全てのブックという意味ですか?

For Each w In Workbooks
If w.Name <> ThisWorkbook.Name Then
w.Close savechanges:=True
End If
Next w
ThisWorkbook.Save
Application.Quit

でどうでしょうか

投稿日時 - 2006-03-16 12:40:03

ANo.3

こんには。

この前、終了時にトラブルが起こるということで、同様の質問が出ていました。
今、試してみました。環境によって違うかもしれませんが、そのまま、Application.Quit では、終われませんでしたね。(見た目は終わっていますが、最初に、Application.Visible =Fale にしたので、常駐していることに気が付かないのです。)

私のほうでは、以下のような方法で可能になりました。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 If ThisWorkbook.Saved = False Then
  ThisWorkbook.Save
 End If
 DoEvents
 ThisWorkbook.Close True
 Application.Quit
End Sub

投稿日時 - 2006-03-16 12:21:51

ANo.2

フォームの QueryClose イベントで
Application.Quit
してやればいいと思います。

投稿日時 - 2006-03-16 11:38:21

補足

ありがとうございます。思い通りに動作しました。もう1つ教えていただきたいのですが、上記の方法で終了するとファイルの上書きについて確認してきます。そのメッセージが邪魔なので、全て上書き保存で終了するという設定は可能でしょうか?よろしくお願いします。

投稿日時 - 2006-03-16 11:44:20

ANo.1

>フォームの右上にある×ボタンで終了すると...
当然ですね。
終了するだけならAlt+F4では駄目でしょうか?

投稿日時 - 2006-03-16 11:37:55

あなたにオススメの質問