#687 | 日付と連番を付けてファイルをバックアップするには? | VBA | |
同じ日に何度もAccessのデータベースファイルをバックアップする場合に、そのバックアップ先のファイル名を「Database1_2020-07-22.accdb」、「Database1_2020-07-22_(1).accdb」、「Database1_2020-07-22_(2).accdb」・・・・のような感じで、『日付と連番』を付けて保存するプログラム例です。 連番の付け方は、その日最初のバックアップでは日付のみ付加、2つめのファイルから(1)・(2)・(3)・・・というようにカッコ付きで番号を振ります。これは、Accessのマニュアル操作の[名前を付けて保存]-[データベースのバックアップ]の動作と同じ命名方法です。 ここでは説明を簡単にするため、バックアップ元のファイル名とバックアップ先のフォルダ名は定数で固定しておくものとします。またバックアップ先のフォルダもすでに作成されているものとします。実際に使う際は、バックアップ元をカレントデータベースとしたりあるいはプロシージャの引数としたり、またフォルダがなければこの処理上で作成するなどしてアレンジしてみてください。 Public Sub DBBackUp() 'バックアップ元DBのフルパス Const cstrSrcDBPath As String = "C:\テスト\Database1.accdb" 'バックアップ先のフォルダ Const cstrBackUpDir As String = "C:\テスト\BackUp\" Dim strSrcDBName As String Dim strBackUpDef As String Dim strBackUpPath As String Dim intDelm1 As Integer, intDelm2 As Integer Dim iintLoop As Integer Const cRetryMax As Integer = 100 '同日に可能な最大バックアップ回数 'バックアップ元DBのファイル名部分だけを取り出し intDelm1 = InStrRev(cstrSrcDBPath, "\") intDelm2 = InStrRev(cstrSrcDBPath, ".accdb") strSrcDBName = Mid$(cstrSrcDBPath, intDelm1 + 1, intDelm2 - intDelm1 - 1) 'バックアップ先ファイル名を初期設定 strBackUpDef = cstrBackUpDir & strSrcDBName & "_" & Format$(Date, "yyyy-mm-dd") '同名ファイルがすでにないか確認する試行ループ For iintLoop = 0 To cRetryMax 'カッコ付きで連番を付加してバックアップ先のフルパスを組み立て strBackUpPath = strBackUpDef & IIf(iintLoop = 0, "", "_(" & iintLoop & ")") & ".accdb" 'そのファイルの存在をチェック If Len(Dir(strBackUpPath)) = 0 Then '存在していなければバックアップを実行 FileCopy cstrSrcDBPath, strBackUpPath 'バックアップしたら試行ループを抜ける Exit For End If Next iintLoop End Sub 【プログラムのポイント】
|
|||
|
Copyright © T'sWare All rights reserved |