ヘルプの森~Excel・Access・Office全般ヘルプデスクサイト

No.004

データベースを開いている状態で自分自身をバックアップする 《FileSystemObject》

2003/2007/2010/2013

データベースはとても繊細で、通常操作を行っていると思っていても壊れることがあります。
頻度の高いデータベースにとって、データベース(ファイル)をバックアップすることはとても重要です。

バックアップは、データベースのデータ元であるテーブルをエクスポートすることも有効ですが、動作などをあれこれと構築している場合は、データベース ファイル自体をコピーしておくと、いざというときにまるごと差し替えられるので楽です。
しかしコピーするという作業はすぐにできるものの、意外に忘れてしまうものです。

そこで、データベースを開いている状態で、ボタンなどから、またはタイミングで自動に保存できるように、VBA の記述サンプルを、以下にご案内します。

今回は、開いているデータベース自分自身を、同じ場所に、元のファイル名に「_6桁日付」を加えてコピーする(バックアップ ファイルを作る)ようにします。
同じ日に実行すると同じファイル名となりますので、その際は上書きするかどうかのメッセージを出します。
なお、データベースの拡張子は「.accdb」としています。

Sub Sample()

  Dim strNameMoto As String
  Dim strNameCopy As String
  Dim strPath As String
  Dim intMsg As Integer

  strPath = CurrentProject.Path & "¥"  '現在のDBの場所
  strNameMoto = CurrentProject.Name  '現在のDBのファイル名
  strNameCopy = Left(strNameMoto, Len(strNameMoto) - 6) & "_" & Format(Now, "yymmdd") & ".accdb"  'コピーするDBのファイル名を作成

  With CreateObject("Scripting.FileSystemObject")

    '同じファイルがあるかどうかを調べ、上書きするかを尋ねる
    If .FileExists(strPath & strNameCopy) Then
      intMsg = MsgBox("上書きしますか?", vbYesNo)
    End If

    'バックアップ作成
    If intMsg = vbNo Then
      MsgBox "キャンセルしました"
      Exit Sub
    Else
      .CopyFile strPath & strNameMoto, strPath & strNameCopy, True
      MsgBox "バックアップ完了!"
    End If

  End With

End Sub

記述前半、データベース自身のパスやファイル名などを取得するために、Applicationオブジェクトの CurrentProjectオブジェクト を使用しています。
Application.CurrentProject.Path で、「D:¥test」のような、ドライブからのフルパス、フォルダ名までを取得します。
CurrentProject.Name で拡張子までのファイル名、
CurrentProject.FullName でフルパスから拡張子までのファイル名
を取得できます。
「Application.」は、上記サンプルのように省略できます。

記述後半の FileSystemObjectオブジェクト については簡単な解説を、下記ヘルプmemoでご参照ください。

ヘルプmemo

<FileSystemObjectオブジェクト>
コンピューターのファイル システムへのアクセスを提供します。
構文: Scripting.FileSystemObject
ヒント:
FileSystemObjectオブジェクトを使用するには、 CreateObjectメソッドを実行し、FileSystemObjectオブジェクトのインスタンスを作成します。
そのインスタンスにメソッドを実行することで、ファイル操作などを実現することができます。
今回、FileExistsメソッド でファイルの存在を調べ、CopyFileメソッド でファイルをコピーしています。
CopyFileメソッド の引数は、最初にコピー元ファイル名、次にコピー先ファイル名を指定、最後の True は上書きするかどうかです。
True は上書き、規定値ですので省略してもかまいません。
上書きをしない False で設定した場合に同じファイルがあると、エラーとなります。

twitter hatena line pocket

関連ヘルプ

AccessからExcelを操作する 《CreateObject》
テーブルの複数フィールドのデータ型をまとめて変更する
既存のメモ帳を開く 《Shell》