LoginSignup
9
2

More than 3 years have passed since last update.

VBAを組んでみた。閉じるときにダイアログを出さない。

Last updated at Posted at 2020-08-10

VBAを組んでみた。

やってみたこと

記入したシートを新規のWorkに保存し、
使っていたWordはフォーマット以外全て消して閉じる。

おこなった理由

毎日、社内の日報を以下の順に書いています。
①Excelにフォーマット通りに記入する。
②記入したExcelを別のexcelにコピペして保存する。
③フォーマットを保存せずに閉じる。

ご存じの通り、
編集をして保存せずに閉じようとすると下図のようなダイアログが毎回出現します。
20200809_ダイアログの画像.png

Microsoft 365 バージョン2006の場合

Excelを閉じるときにダイアログが出てこないように組みました。

コードの作成

Key🔑コマンド

それがThisWorkbook.Saved = True コマンド
ダイアログ的には保存したけど、Excel自体は保存しないコマンド。

仮にThisWorkbook.Saved = True のTrueFalseに変更すると、
コマンドの意味がなくなりダイアログが発生します。

コード

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim rslt As VbMsgBoxResult
rslt = MsgBox("データを保存しましたか" & vbCrLf & "メールは送信しましたか", Buttons:=vbYesNo)

  If rslt = vbYes Then         

    'Yesの場合 保存せずに閉じる
     ThisWorkbook.Saved = True

     Application.CutCopyMode = False

  Else
    'Noの場合 何もしない(閉じるを無効にする)
     Cancel = True

  End If


End Sub

解説

今回は、閉じる直前に実行したかったため、
オブジェクトは、標準モジュールではなくworkbookを選択し、
プロシージャはBeforeCloseを選択しました。

宣言は、Private Sub Workbook_BeforeClose(Cancel As Boolean)としています。(コード内1⃣について)
このコードだとコード中に、Cancel = Trueを入れると「閉じるを無効する」という意味になり、何をしても閉じることができなくなります。

今回ダイアログの代わりにメッセージボックスを表示し、
キャンセルができるように使用しました。

Cancel = Trueを使用せずに、
Application.CutCopyMode = Falseダイアログを非表示にするコマンドを
使用しても同じ結果が出ます。

ーーーーーーーーーーーーーーーーーーーーーーーー
閉じるときに出現するダイアログの他に、こんなダイアログも出てくることがあります。
20200809_ダイアログの画像3.png
ダイアログに書いてある通り、閉じるときにコピーとして取得したデータをどうするのか聞いてくれます。

私はコピーを保存しておく必要がなかったため、
Application.CutCopyMode = Falseを使用し、コピーを無効化しました。
コピー後にEscapeキーを押して無効化するのと同じ感じです。

気づき

初めは、ThisWorkbook.Saved = Trueではなく、
Workbooks(failename).Closeなどの閉じるコマンドを書こうとしていました。
すると、閉じるコマンドが二重化してしまい、エラーは出てこないのですが、
下図のように何もない画面が出力されました。

まとめ

考えてみるどこに保存するか、形式はどうするのか決めていないので理解できるのですが
ThisWorkbook.Saved = Trueコマンドを知ったときはサーブと書いてあるのにセーブされないことに疑問に思いました。
色々と苦戦はしましたが、無事動くようになり作成でき今は毎日使用しています。

ほかに作成したコード
VBAを組んでみた。新しいbookに保存するの巻
VBAを組んでみた。1か月分の作業時間を集計するの巻

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2