テーブルをCSVファイルにエクスポートするVBA
さらに格納するフォルダを都度タイムスタンプをして、いつバックアップしたテーブルデータか分るようにもしておきます。
■サンプルACCESSの構成
ここでは適当に作成したテーブル2つと、エクスポートするためのモジュールを1つ作成しておきます。
【テーブル】
T_商品
T_店舗
【モジュール】
Module1
■テーブルのデータ内容はこんな感じ
【T_商品】
ID オートナンバー
商品コード 短いテキスト
商品名 短いテキスト
【T_店舗】
ID オートナンバー
店舗コード 短いテキスト
店舗名 短いテキスト
■バックアップフォルダとCSV保管用フォルダ
Cドライブに「バックアップ」フォルダを用意します。
さらにその中には「一時」フォルダと「保管」フォルダの2種類のフォルダを用意しておきます。
CSV保管の流れとしては
① 「一時」フォルダにCSVファイルを格納する
② 「一時」フォルダを「保管」フォルダ内にコピーする
③ 「保管」フォルダ内の「一時」フォルダの名前を日時(タイムスタンプ)に変更する
④ 最初の「一時」フォルダ内のCSVファイルを削除する
となり、最終的に「一時」フォルダ内には何も残りません
【バックアップフォルダ】
Cドライブに作成しています
【バックアップフォルダ内】
2つのフォルダを作成しています
【「保管」フォルダ内】
こちらにCSVを格納したフォルダを都度、タイムスタンプを名前にして格納していきます。
■モジュールのVBA
Public Sub バックアップ実行()
'①バックアップ実行選択*****************************************************************
If vbNo = MsgBox("バックアップを実行しますか?", vbYesNo, "確認") Then
Exit Sub
Else
End If
'②テーブルエクスポート*****************************************************************
DoCmd.TransferText acExportDelim, , "T_商品", "C:\バックアップ\一時\shohin.csv", True
DoCmd.TransferText acExportDelim, , "T_店舗", "C:\バックアップ\一時\tenpo.csv", True
'③バックアップフォルダに日付時刻をつけてフォルダごとコピーする*************************
Dim BUCstr
Dim BUSstr
Dim newdatestr
BUCstr = "C:\バックアップ\一時"
BUSstr = "C:\バックアップ\保管"
newdatestr = Format(Now(), "yyyymmdd_hhnnss")
Dim objfso
Set objfso = CreateObject("Scripting.FileSystemObject")
objfso.CopyFolder BUCstr, BUSstr & "\" & newdatestr & "_BU_csv"
'④一時データフォルダ内のファイルを削除する*********************************************
objfso.DeleteFile "C:\バックアップ\一時\shohin.csv"
objfso.DeleteFile "C:\バックアップ\一時\tenpo.csv"
Set objfso = Nothing
'⑤バックアップ完了メッセージ***********************************************************
MsgBox "バックアップを完了しました。", , "情報"
End Sub
■順番に見ていきましょう
①バックアップ実行選択
初めにバックアップをするorしないの選択を確認します。
vbNo = いいえ を選択した時はExit Subとなります。
②テーブルエクスポート
構文「DoCmd.TransferText acExportDelim」を使用して、
「T_商品」テーブルを「shohin.csv」ファイルに出力
「T_店舗」テーブルを「tenpo.csv」ファイルに出力
最後に「True」としてあるので、1行目にカラム(列)名を出力しています。
③バックアップフォルダに日付時刻をつけてフォルダごとコピーする
ここで特に重要なのは最後の下記の行ですね。
「objfso.CopyFolder BUCstr, BUSstr & "\" & newdatestr & "_BU_csv"」
変数「newdatestr」がタイムスタンプで、「_BU_csv」をフォルダ名の最後につけてフォルダをコピーしています。
④一時データフォルダ内のファイルを削除する
Cドライブ内の「一時」フォルダに作成したCSVファイルを削除します。
⑤バックアップ完了メッセージ
メッセージボックスで完了を知らせて、プログラムの終了です。
最後に
以前はバックアップ方法が分らなくて、ACCESSそのものをコピーしていたのですが、容量が大きくなりすぎるのでCSVで残す方法に変えました。
さらにフォルダに日時をつけることでいつのデータかも一目で分かるし、復元もしやすいと思うので、ご活用ください。