開発中のマクロで、こまめに保存しておきたいケースがあったのでコードを書いてみた。
これは開発中のブックに埋め込んで利用する前提。私は標準モジュール「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に投稿しようとしたら文字数限界だったので記事にした次第。