プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
ExcelVBA、ブックを閉じるときに自動的に上書き保存する
結論から書けば、Visual Basic Editorを起動して

Sub Auto_Close()
    If ThisWorkbook.Saved = False Then
        ThisWorkbook.Save
    End If
End Sub

とか書けばOKです。

それでは細かく見ていきましょう。

きっかけは、とあるお客さまでした。

あのさ~、Excelでいちいち「変更を保存しますか?」とか聞いてくるのウザいんだけど。
わざわざ変更してるんだから保存するに決まってんだろ。

書いてある内容を!

書いてある通りに!

そのまま保存しろ!

とか思わない?思うよね?思うだろ?

と言われちゃいましてね。
Microsoftの技術者の方々の心の叫びが聞こえてくる気もしますが、
そこはほれ、私もお金をくれる人には媚びへつらうわけですよ。

ですよね~。面倒くさいですよね~(人´∀`)

と、お追従を言ったあとに、さて、どーやって対応する(--?と困ったわけです。

困ったときのGoogle先生、教えてくれたまえ( ̄^ ̄)ノ

ふむふむ(--)

1.Excelを開きます

2.Alt+F11キーを押してVisual Basic Editorを起動します

3.上のメニューのところで「挿入(I)」→「標準モジュール(M)」を押します。

4.「Module1」とかなっている奴に以下のコードを追加します
Sub Auto_Close()
    If ThisWorkbook.Saved = False Then
        ThisWorkbook.Save
    End If
End Sub

5.名前を付けて保存をします

これでブックを閉じるときに自動的に上書き保存できるのだそーな。

「Auto_Close()」は「ブックを閉じる直前に動きますよ」なイベントです。
このタイミングで人間様の代わりにマクロさんが上書き保存しちゃってるわけです。
閉じる直前に上書き保存しちゃうので、実際に閉じるタイミングでは何も確認が出ません。
ちょっと違いますが、何も変更しないで閉じたときと同じような扱いになります。

このコードが埋め込まれたブックは次回から確認無しで上書き保存されますよ。

ちなみに「全部のブックにいちいちマクロを埋め込むのは面倒くさいんだけど?」な人は

ExcelVBA、マクロをすべてのブックに適用する

の記事をご覧ください。
すべてのブックに一括反映させることができます。

あっ、そうそう。
余談ですが、閉じるときに強制的に変更内容を「破棄」したい場合は

Sub Auto_Close()
    ThisWorkbook.Saved = True
End Sub

とすればOKです。
「ThisWorkbook.Saved」は「変更したの保存した?」なプロパティです。
こいつを強制的に上書きして、保存していないのに「保存?したした!」と誤魔化しています。

そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:ExcelVBA  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事