#VBAを組んでみた。
##やってみたこと
記入したシートを新規のWorkに保存し、
使っていたWordはフォーマット以外全て消して閉じる。
##おこなった理由
毎日、社内の日報を以下の順に書いています。
①Excelにフォーマット通りに記入する。
②記入したExcelを別のexcelにコピペして保存する。
③フォーマットを保存せずに閉じる。
ご存じの通り、
編集をして保存せずに閉じようとすると下図のようなダイアログが毎回出現します。
Microsoft 365 バージョン2006の場合
Excelを閉じるときにダイアログが出てこないように組みました。
##コードの作成
###Key🔑コマンド
それがThisWorkbook.Saved = True
コマンド
ダイアログ的には保存したけど、Excel自体は保存しないコマンド。
仮にThisWorkbook.Saved = True
のTrueをFalseに変更すると、
コマンドの意味がなくなりダイアログが発生します。
###コード
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
ダイアログを非表示にするコマンドを
使用しても同じ結果が出ます。
ーーーーーーーーーーーーーーーーーーーーーーーー
閉じるときに出現するダイアログの他に、こんなダイアログも出てくることがあります。
ダイアログに書いてある通り、閉じるときにコピーとして取得したデータをどうするのか聞いてくれます。
私はコピーを保存しておく必要がなかったため、
Application.CutCopyMode = False
を使用し、コピーを無効化しました。
コピー後にEscapeキーを押して無効化するのと同じ感じです。
##気づき
初めは、ThisWorkbook.Saved = True
ではなく、
Workbooks(failename).Close
などの閉じるコマンドを書こうとしていました。
すると、閉じるコマンドが二重化してしまい、エラーは出てこないのですが、
下図のように何もない画面が出力されました。
##まとめ
考えてみるどこに保存するか、形式はどうするのか決めていないので理解できるのですが
ThisWorkbook.Saved = True
コマンドを知ったときはサーブと書いてあるのにセーブされないことに疑問に思いました。
色々と苦戦はしましたが、無事動くようになり作成でき今は毎日使用しています。
ほかに作成したコード
VBAを組んでみた。新しいbookに保存するの巻
VBAを組んでみた。1か月分の作業時間を集計するの巻