【Excel VBA】バックアップを取るマクロをアドイン化する

当ページのリンクには広告が含まれている可能性があります。
バックアップをとるマクロのアドイン化

こんにちは、ユーキです。

バックアップを取るマクロのアドイン化についてお話します。

前回、バックアップを取るマクロを作成しました(【Excel VBA】バックアップを取るマクロ を見る)。マクロだと、バックアップを取りたいファイルすべてに処理を記述する必要があり、現実的ではありません。

アドイン化することで、すべてのEXCELファイルをバックアップ対象とするために、アドインにしたいと思います。

目次

アドインでバックアップを取得する

アドインでWorkbookBeforeSaveイベントを取得させるために、WithEventsキーワードを使います。アドインの作成方法は、アドインの作成 を参考にしてください。

あわせて読みたい
【Excel VBA】アドインを作成する こんにちは。ユーキです。 今日は、アドインの作り方を紹介します。 【アドインとは】 マクロはExcelブックとセットのプログラムですが、アドインはブックとは切り離さ...

Applicationオブジェクトの利用

まずは、イベントを受け取るための仕掛けを作ります。ApplicationオブジェクトをWithEventsキーワードを指定して宣言します。変数名はなんでもOKです。今回は「App」とします。

宣言するのは、アドインの「ThisWorkbook」モジュールに記載をします。

アドインのThisWorkbook
Private WithEvents App As Application

保存前イベントの定義

次に、保存前イベントを定義します。こちらも、アドインの「ThisWorkbook」モジュールに記載をします。

イベントは自身で書いてもいいですが、引数を正しく定義する必要があるので、画面上部のプルダウンから選択するほうが無難です。

先ほど宣言した、Applicationオブジェクト「App」が選択できるようになっているはずですので、選択します。右側のプルダウンから、「WorkbookBeforeSave」を選択します。

イベント追加方法
イベントの追加方法
Private Sub App_WorkbookBeforeSave(ByVal wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
End Sub

もしイベントの選択を間違えてしまった場合、コードをそのまま削除すればOKです。

バックアップ処理

前回の バックアップを取るマクロを作成 とほぼ同じコードとなりますが、ThisWorkbookとしていた箇所を、wb(保存前イベントの第1引数) に置き換えます。

この処理は、先ほど定義した「App_WorkbookBeforeSave」イベントに直接記述してもいいのですが、コードの可読性を上げるため標準モジュールに記述します。

Public Sub BeforeSaveBackup(ByVal wb As Workbook)
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    '拡張子なしのファイル名取得
    Dim fileNm As String
    fileNm = fso.GetBaseName(ThisWorkbook.Path & "\" & wb.Name)
    'ファイルの拡張子
    Dim extName As String
    extName = fso.GetExtensionName(wb.Path & "\" & wb.Name)
    '日付文字列 年月日時分秒を取得
    Dim timeTx As String
    timeTx = Format(Now(), "yyyyMMddhhnnss")
    fso.CopyFile wb.Path & "\" & wb.Name, wb.Path & "\backup\" & fileNm & "_" & timeTx & "." & extName
    
End Sub

この処理を「App_WorkbookBeforeSave」イベントから呼び出すようにします。

Private Sub App_WorkbookBeforeSave(ByVal wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Call BeforeSaveBackup(wb)
End Sub

記述する処理はこれでおしまいです。

動作確認

では、作成したアドインを動かしてみましょう。

まずは、Excelファイルと同じ階層にbackupフォルダを作成した状態を準備します。

実行フォルダ
実行フォルダ

backupフォルダには何もありません。

実行前のbackupフォルダ
実行前のbackupフォルダ

Sample.xlsxを起動し(アドインはすでに設定済)、保存を行います。保存は、Ctrl+Sのショートカットでも、保存ボタンでも、上書き保存、名前を付けて保存でも、なんでもOKです。

実行後のbackupフォルダ
実行後のbackupフォルダ

無事にバックアップファイルが作成されました!

注意点

バックアップは際限なくバックアップファイルを作成し続けてしまいます。アドイン化をすると、知らないうちにファイルが増えていくことになってしまいます。定期的にバックアップフォルダは削除するようにしてください。

また、対象ファイルがある階層の「backup」フォルダに保存するようにしているので、フォルダが存在しないとエラーになってしまいます。アドインでバックアップを取るのであれば、バックアップフォルダは固定化をしたほうがよいかもしれません。

まとめ

今回は、バックアップを取るマクロのアドイン化についてでした。

バックアップを取るマクロのアドイン化
  • WithEventsキーワードを使う
  • イベント記述は、アドインのThisWorkbookに記述する

少しでも参考になれば、幸いです。

スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

旅好き職業プログラマ。文系大学卒業後、ITソフトウエア開発会社に勤務してプログラミング言語を学ぶ。現在は転職し、プロジェクトマネージャ的ポジションで生産管理システムの開発にあたる。
得意言語は、VB、VB.NET、C#.NET、Java、SQLなど。

目次