🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

2回答

12913閲覧

エクセルを閉じる際の保存確認のメッセージボックスを作るマクロ

nozomi0930

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2019/10/18 07:04

エクセルを閉じる際に、実装させるマクロがあります。
(フィルタ解除や表示縮尺の統一など)
↓下記のスタートです
Private Sub Workbook_BeforeClose(Cancel As Boolean)

この結果を残すために最後に保存のコードを記載していたのですが
保存をしたくないときにも必ず保存されてしまいこまっています。

通常、エクセルを閉じる際に出る確認メッセージ
「保存しますか?」「はい、いいえ、キャンセル」
これをマクロで記載、実装させる方法はありますでしょうか。

下記のコードではうまく実行しません。。
下記のコードを使用せずでも構わないので、
方法を教えていただけると幸いです。よろしくお願いいたします。

Dim Ans As Long
Ans = MsgBox("保存して終了しますか?", vbYesNoCancel + vbInformation, Select Case Ans
Case vbYes
ActiveWorkbook.Save
Application.Quit
Case vbNo
ActiveWorkbook.Saved = True
Application.Quit
Case Else
Cancel = True
Exit Sub
End Select
End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2019/10/18 07:11

どううまく実行しないのでしょうか? 詳細を記入してください。
ttyp03

2019/10/18 07:32

MsgBoxの行が不完全ですね。 次の行とくっついている。 あとコードはコードを選択したあと<code>ボタンを押し「VBA」と入力してください。
nozomi0930

2019/10/21 05:58

もう一度試してみたところうまく動作しました>< ありがとうございました!
guest

回答2

0

提示のコードで特に問題なさげですが、整理するとこんな感じでしょうか。
(インデントがないと非常に読みにくいです><)

ExcelVBA

1Private Sub Workbook_BeforeClose(Cancel As Boolean) 2 Dim lngYesNo As Long 3 4 Application.Quit 5 6 lngYesNo = MsgBox("上書き?", vbYesNoCancel + vbInformation) 7 8 Select Case lngYesNo 9 Case vbCancel: Cancel = True 10 Case vbNo: Me.Saved = True 11 Case vbYes: Me.Save 12 End Select 13End Sub

ちょっと気になったのは、
ActiveWorkbook
って表現、
あと、同じブックを2画面以上で表示してたら、どんな挙動をするのだろう?

それから、バージョンによっても挙動が違うかも、
今日はこちらは2003なので、、、、、

投稿2019/10/18 11:02

編集2019/10/18 11:11
mattuwan

総合スコア2163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nozomi0930

2019/10/21 05:58

もう一度試してみたところうまく動作しました>< ありがとうございました!
guest

0

ベストアンサー

あなたの提示されたコードです。以下で間違いないですか。
保存して終了しますか?で「いいえ(N)」をクリックすると、変更分が反映されずに終了します。
何が問題なのでしょうか。
ThisWorkbookに記述。

VBA

1Private Sub Workbook_BeforeClose(Cancel As Boolean) 2 Dim Ans As Long 3 Ans = MsgBox("保存して終了しますか?", vbYesNoCancel + vbInformation) 4 Select Case Ans 5 Case vbYes 6 ActiveWorkbook.Save 7 Application.Quit 8 Case vbNo 9 ActiveWorkbook.Saved = True 10 Application.Quit 11 Case Else 12 Cancel = True 13 Exit Sub 14 End Select 15End Sub 16

投稿2019/10/18 10:08

tatsu99

総合スコア5493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nozomi0930

2019/10/21 05:58

もう一度試してみたところうまく動作しました>< ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問