<概要>
今回は、自動的にファイルのバックアップを作成する汎用プロシージャを紹介します。
作成されたバックアップのファイル名は元のファイル名に[YYYYMMDD]の表示形式で日付が付くようになります。
また保存先のフォルダも引数で選ぶことが可能になっています。
紹介する汎用プロシージャを「Excelブックの保存時のイベントプロシージャ(Workbook_BeforeSave)」で使用することで、指定のExcelブックの自動バックアップができるようになります。特に重要なExcelブックだったり、開発用アドイン(xlam)などは実行例の処理を追加しておいたほうが良いでしょう。
<用途>
特定ファイルを自動的にバックアップを作成しておく
重要なExcelブックやアドインを自動バックアップを作成する
<プロシージャ紹介>
Public Sub BackupWithDateToFolder(FullPath As String, BackupFolderPath As String)
名前: BackupWithDateToFolder /Subプロシージャ
説明: 指定ファイルを指定フォルダに日付をつけてバックアップ
'引数
'FullPath ・・・バックアップするファイルのフルパス
'BackupFolderPath・・・バックアップ先のフォルダパス
<実行例>
次のようなコードを用意します。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'バックアップするファイルのフルパス(=ThisWorkbook.FullName)
Dim FullPath As String: FullPath = ThisWorkbook.FullName
'OneDriveを起動中なら次の処理が必要
FullPath = ConvOneDrivePath_LocalPath(FullPath)
'バックアップ先のフォルダパス(事前にフォルダを作成しておくこと)
Dim BackupFolderPath As String: BackupFolderPath = "C:\Test"
'バックアップを作成する
Call BackupWithDateToFolder(FullPath, BackupFolderPath)
End Sub
コードはThisWorkbookオブジェクトにおける保存時イベントプロシージャです。
コードはサンプルファイルの中に記載しています。
保存先のフォルダは「C:\Test」としていますが、サンプルファイルの実行結果を確認する際はご自身でこのフォルダを用意してください。
実行サンプルのファイル名は「BackupWithDateToFolder.xlsm」としています。
このファイルを起動中に保存するとバックアップ先のフォルダに次のようなファイルが作成されます。
サンプルコードではOneDriveの影響も考慮して「ConvOneDrivePath_LocalPath」を利用しています。
<サンプルファイル>
<コード>
Public Sub BackupWithDateToFolder(ByRef FullPath As String, _
ByRef BackupFolderPath As String)
'指定ファイルを指定フォルダに日付をつけてバックアップ
'「Microsoft Scripting Runtime」ライブラリを参照すること
'20211102
'20231217 変更
'参考
'https://www.softex-celware.com/post/BackupWithDateToFolder
'引数
'FullPath ・・・バックアップするファイルのフルパス
'BackupFolderPath・・・バックアップ先のフォルダパス
'元のファイル名から日付が付いたファイル名を作成
Dim FSO As New FileSystemObject
Dim FileName As String
Dim Extension As String
Dim BackupFileName As String
FileName = FSO.GetFileName(FullPath)
Extension = FSO.GetExtensionName(FullPath)
BackupFileName = FileName & "_" & _
Format(Date, "YYYYMMDD") & _
"." & Extension
'バックアップ作成
Call FSO.CopyFile(FullPath, _
BackupFolderPath & "\" & BackupFileName)
End Sub
Kommentare