t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA 開発中マクロブックのバックアップを取るマクロ

開発中のマクロで、こまめに保存しておきたいケースがあったのでコードを書いてみた。
これは開発中のブックに埋め込んで利用する前提。私は標準モジュール「DevTools」に保存して使っている。

Sub BackupFile()
    'Microsoft Scripting Runtimeへの参照設定が必要
    Dim fso As FileSystemObject: Set fso = New FileSystemObject
    With ThisWorkbook
        Dim f As File: Set f = fso.GetFile(.FullName)
        Dim backupFolderPath As String: backupFolderPath _
            = .Path & "\backup_" & Left(f.Name, Len(f.Name) - Len(fso.GetExtensionName(f.Path)) - 1)
        If Not fso.FolderExists(backupFolderPath) Then fso.CreateFolder backupFolderPath
        .SaveCopyAs backupFolderPath & "\" & Format(Now, "yyyymmddhhMMss") & "_" & .Name
    End With
End Sub

実行すると、そのブックと同じパスにbackup_[ブック名(拡張子除く)]というフォルダーが作成され、編集中のブックのコピーが保存される。

ファイル名は秒単位なので1秒に複数回実行すると古いコピーが上書きされてしまうことに注意。
(そんな頻度で実行するシチュエーションは無いと思うが)

いつもなら少し大掛かりなマクロではGitHubを使ってバージョン管理するんだけど、今回はブック本体に公開できない情報を含むので、ファイルのコピーを残すという原始的なバックアップに頼ることにした。

このくらいのコードならTwitterに投稿しようとしたら文字数限界だったので記事にした次第。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。