Excel
ExcelVBA
エクセル
Excel VBADay 17

ファイルを最終保存時の状態に一瞬で戻す

はじめに

まず初めにお伝えしますが、、よく間違えて保存してしまった状態を元に戻したいという方がいらっしゃいますが、今回のご紹介はそのような内容ではないのでご了承ください。
今回の意図としては、誰かが作ったファイルや自分が作ったファイルについて少し確認するために数式を入れたり色を塗ったりしたりしていろいろと確認を終えた後、改めて元の状態、つまりは画面を開いたときの状態に綺麗に戻したいときに有効な方法です。もちろん作業途中に保存してしまった場合にはそれが「最終保存時」となりますので、そこまでしか戻りませんのでそこはご理解ください。

どうするのか?

今までにこのような画面、一度は見たことがあると思いますがいかがでしょう。
B2843FA7-804E-4F70-A722-DA0BEFD20B29-9717-000002E41B4DA920.jpeg
これは今開いているファイルを再度開こうとすると出てくる確認画面です。これが表示されたときにその操作者の大半はネガティブなメッセージに困惑し無意識に「いいえ」を選択されると思いますが、ここで「はい」を選択すれば確認メッセージの通りこれまでの内容は破棄されます。破棄されては困ることは多いためです。ただこれを破棄を可能するための一機能だと考える、つまりはこの警告を逆手に取ることで最終保存状態に一瞬で戻したような体験が実現できます。

プログラム

次のようにします。

Sub KeitaKushimaResetButton()
    If msgbox (“ファイルを最終保存状態に戻します。いいですか?”,vbexclamation+vbyesno+vbdefaultbutton2,”確認”)=vbyes then
        If msgbox (“本当にいいですね?”,vbexclamation+vbyesno+vbdefaultbutton2,”最終確認”)=vbyes then
            Application.DisplayAlerts = False
             Workbooks.Open ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
            Application.DisplayAlerts = true
            Exit sub
        End if
    End if
    Msgbox “処理は実行されませんでした”,vbinformation,”お知らせ”
End sub

内容が内容なだけに確認をしつこく入れましたが、処理の本体部分だけを切り出すと下記の通りです。

Sub KeitaKushimaResetButton()
    Application.DisplayAlerts = False
     Workbooks.Open ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
    Application.DisplayAlerts = true
End sub

ApplicationオブジェクトのDisplayAlertsプロパティはExcelの確認メッセージを表示するかどうかを制御するため、その機能を停止すれば上の確認メッセージは表示されなくなり、強制的に処理が実行するため、結果「それまでの内容は破棄」され、そこには何もなかったかのように元に戻ったExcelが瞬間的に現れます。一度お試しいただければ感じていただけると思いますが、通常の処理で一ステップずつ戻すのではないので処理は物凄く速く、この理屈を知らないユーザがこのマクロを使って元どおりにできたときにはきっと魔法でも使ったかのように感じることと思います。

このページでお伝えしたいこと

不利な処理と思われる内容もそれを逆手に取れば応用できることがある、ということにお気づきいただければと思います。もし困難な課題があったとしても何かちょっとした知識でシンプルに解消できるかもしれないというヒントになれば幸いです。ひとまず、面白い機能ですので一旦お手元の環境でお試しいただきたく思います。