![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
こんばんは。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1343464
上記質問のNo.2の回答に
>ThisWorkbook.Close SaveChanges:=True '要保存のダイアログが出ません。
>Falseなら、ダイアログが出てきます。ただし、デフォルトは False です。
●しかし、この場合は、Application.Quit(Excelの終了)は、使えません。
●Close メソッドではなく、Save メソッドを使ってから、Application.Quit になります。
とありますが、●の行の意味がちょっと分かりません。
後学のため説明願えれば幸いです。
宜しくお願いします。
No.3ベストアンサー
- 回答日時:
quit123さん、こんにちは。
私は、時々、基本的なところで大ポカをしたかもしれないと、今回は、ちょっと動揺しました。(^^;
お書きになったコード
>Sub test_BookClose()
> Application.Quit
> Range("B2") = 33333
> ThisWorkbook.Close SaveChanges:=True
>End Sub
試してみました。なるほど、そういう問題があるのですね。
>Application.Quitはそれが書かれているプロセデュアーが終了するまでは実行されないという特性があります。
上記のようなコードは、私は書かないけれども、Quit では終わらないということですね。勉強になりました。なるほど、それで、Object変数の戻しや、 Application.EnableEvents の戻しが、利くわけですね。
ちょっと、突っ込んで書いてしまいます。(^^;
その現象として、やってみて感じたのは、それはExcelのアプリケーションのWorkbooksコレクション・オブジェクトの終了手続き(Application.Quit)と完全終了までのタイムラグではないか、ということです。
もし、プロシージャーが終わるまでなら、以下のように、プロシージャそのものを止めてしまったら、どうでしょうか?やはり、予定されていたように終わってしまいますよね。Application.Quit が実行されます。また、プロシージャー自体を止める Macro関数 Halt を使っても、終了してしまいます。
Sub test_BookClose()
Application.Quit
Range("B2").Value = 33331
ThisWorkbook.Close SaveChanges:=True
Stop
End Sub
おはようございます。
Wendy02さんのことですからたぶん何かツッコミが入るのではと期待して閉めないでおきました・・。(^^;;;
>その現象として、やってみて感じたのは、それはExcelのアプリケーションのWorkbooksコレクション・オブジェクトの終了手続き(Application.Quit)と完全終了までのタイムラグではないか、ということです。
>もし、プロシージャーが終わるまでなら、以下のように、プロシージャそのものを止めてしまったら、どうでしょうか?やはり、予定されていたように終わってしまいますよね。
これはタイムラグとかの問題ではなく、Application.Quitの仕様だと思います。
また、プロシージャーを止める、Stopステートメントを実行する、ということはその時点でそのプロシージャーは終了したと判断しているのではないでしょうか。
また違った意見もあろうかとは思いますが、それらはApplication.Quitの実際のロジックが分からなければ全て想像の域をでませんので今回はこれで閉めさせて頂きます。
最後に一言。Wendy02さんのVBAに関しての知識(他もあるかも知れませんが(^^;;;)には回答を見るたび驚かされます、と言うより感心されられます。
これからも素晴らしい回答期待しております。
No.2
- 回答日時:
参考までに^^;
私はセーブコマンドを使ってます
Sub MENU_CLOSE()
ActiveWorkbook.Save
Application.Quit
End Sub
おはようございます。
回答ありがとうございます。
やはりプログラム終了の流れとしては、Application.Quitは最後にあった方が分かり易いですよね。
また何かあった時は宜しくお願いします。
No.1
- 回答日時:
その文章を書いた本人です。
>しかし、この場合は、Application.Quit(Excelの終了)は、使えません。
実際、聞くよりも、やってみれば一目瞭然です。
Sub test_SheetDelete()
Application.DisplayAlerts = False
'On Error Resume Next
'ActiveSheet.Delete
Application.DisplayAlerts = True
ThisWorkbook.Close SaveChanges:=True ←ここでマクロはお終いです。
Application.Quit ←これは使えません。
End Sub
Bookが出ていない、黒い画面が残ります。
正しく、こちらだと思っていますが、何か、問題が残るのでしょうか?
Sub test_Appquit()
With ThisWorkbook
If .Saved = False Then
.Save '保存して
End If
End With
Application.Quit 'Excelを終了
End Sub
早速の回答ありがとうございます。
やはりそういうことでしたか。
Wendy02さんのことですからもしや別な理由が、
と思い質問してみました。
Application.Quitにはある特性があります。
先ず、以下のコードを試してみてください。
----------------------------------------------
Sub test_BookClose()
Application.Quit
Range("B2") = 33333
ThisWorkbook.Close SaveChanges:=True
End Sub
----------------------------------------------
Sub test_AppQuit()
Application.Quit
Range("E2") = 666666
With ThisWorkbook
If .Saved = False Then
.Save
End If
End With
End Sub
---------------------------------------------
どうですか? まともに動作しますよね。
このようにApplication.Quitはそれが書かれているプロセデュアーが終了するまでは実行されないという特性があります。
ですから、Closeとも使えるし、またプロセデュアーのどこにあってもOKなのです。
ま、気分的には最後に書きたい気もしますが・・・。
参考になれば幸いです。
Wendy02さんの懇切丁寧かつ的を射た回答は非常に参考になります。これからも目から鱗の回答を期待しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) Access VBAから使用したExcelプロセスを閉じる方法について 4 2022/06/08 17:50
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) Excelのマクロコードについて教えてください 1 2022/03/27 12:02
- Visual Basic(VBA) 3個のfileのセルデータを1個のfileのセルに貼り付けるVBAコードですが。 1 2023/02/20 09:21
- Excel(エクセル) EXCEL関数(数式)を教えてください 2 2022/06/08 18:32
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELの散布図で日付が1900年に...
-
エクセルのツールバーから数値...
-
祝日と土曜、日曜の合計をカウ...
-
Excel分数の表示について
-
特定の文字列を含む、住所を抽...
-
Excelについての質問です。 B2...
-
文字2桁、3桁交じりの文字列...
-
Excelで表を作ったところに文字...
-
【マクロ】2回実行したら、エ...
-
【EXCEL】画像の黄色部分の抽出...
-
マイクロソフトのPADを使ってい...
-
絶対参照
-
マクロエクセルのブロック解除
-
在庫管理表に使うエクセルの関...
-
Excelピボットテーブルの1行目
-
エクセルのクイックアクセスツ...
-
DATE関数で現在の年齢を出した...
-
ユーザー定義関数をアドイン登...
-
職場の人から聞かれており、こ...
-
【マクロ】毎回、ファイル名が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Rubyの超初心者です。「戻り値r...
-
【BrowseForFolderでデスクトッ...
-
python return 関数
-
【引数と戻り値の違い】 はじめ...
-
再帰に関する質問です。
-
ブロックつきメソッドやyield文...
-
CloseとQuitについて
-
railsチュートリアル5章の演習
-
rubyでのproc
-
【Ruby】 文法的に何が悪いの...
-
ぱいソン
-
Rubyにインクリメンタル演算子...
-
ハッシュ(単語数を数える) た...
-
ジェネレーターとはなんですか?
-
自作したメソッド・・・こんな...
-
railsでアプリケーションコント...
-
Ruby 自作メソッドのブロック...
-
Ruby Fileクラスについて
-
レコードセットオブジェクトの...
-
timesの使いどころ
おすすめ情報