適用対象: Access 2024、Access 2021
このトピックでは、IT 管理者が Microsoft Access データベースからテキスト ファイルにすべてのデータとオブジェクトをエクスポートし、他のツールで使用できるようにする方法と、データの移植性をサポートする方法について説明します。
テーブルに格納されているデータについては、Excel などのアクセス ウィザードを使用して他のさまざまな形式にデータをエクスポートできます。「Excel にデータをエクスポートする」または「テキスト」を参照してください。「 データをテキスト ファイルにエクスポートする」を参照してください。
次の手順では、 DoCmd.TransferText メソッド コマンドを使用して VBA コードを使用してオブジェクトをエクスポートしてテーブル データをエクスポートする方法と、他のオブジェクトの Application.SaveAsText コマンドを使用する方法を示します。
指定されたコードは、データベースとコピー先フォルダーへの完全なパスを使用して呼び出すことができる関数を作成します。 次に、データベース内の各オブジェクトのテキスト ファイルが作成されます。このファイルには、テーブルからのデータと、フォームやレポートなどのすべてのユーザー作成オブジェクトの定義が含まれます。
このプロセスでは OLE オートメーションが使用されるため、コードは PowerShell を使用するか、C# などの .NET 言語を使用して記述することもできます。 この例では、VBA を使用します。
- 新しいデータベースを作成します。
- 新しいモジュールを作成します。
- 次のエクスポート データベース コードをコピーしてモジュールに貼り付けます。
- エクスポートするデータベースごとに、イミディエイト ウィンドウに次のコマンドを入力します。
ExportAccessDatabase "_Full path to database_", "_Folder to contain exported objects_"
- エクスポートされたデータベースの名前を持つ新しいフォルダーがターゲット フォルダーに作成されることに注意してください。 これは、エクスポートされた各データベースの内容を個別のフォルダーに保持しながら、複数のデータベースを同じターゲット フォルダーにエクスポートできるようにするためです。
- エクスポートするデータベースにスタートアップ フォームまたは AutoExec マクロが含まれている場合、スタートアップ アクションがエクスポート プロセスに干渉する可能性があるため、データベースのスタートアップ フォーム プロパティをリセットし、ExportAccessDatabase を呼び出す前に AutoExec マクロを削除または名前変更する必要があります。
- このプロセスをさらに自動化する場合は、フォルダーへのパスを指定し、フォルダー内のすべてのデータベースを列挙し、ExportAccessDatabase 関数を呼び出して各 Microsoft Access データベースをターゲット フォルダーにエクスポートする関数を記述できます。
データベース コードのエクスポート (VBA)
Option Compare Database
Option Explicit
' Pass in the location of the database to export, and the folder to export to
Sub ExportAccessDatabase(strDBPath As String, exportFolder As String)
Dim objAccess As Object
Dim db As Database
Dim td As TableDef
Dim qd As QueryDef
Dim doc As Document
Dim cont As Container
On Error GoTo Err_ExportDatabase
' Create a new instance of Access
Set objAccess = CreateObject("Access.Application")
' Open the database
objAccess.OpenCurrentDatabase strDBPath
' Create a new folder using the name of the database to hold all the exported objects if it does not already exist
exportFolder = exportFolder & Mid(strDBPath, InStrRev(strDBPath, "\"), InStr(strDBPath, ".") - InStrRev(strDBPath, "\")) & "\"
If Dir(exportFolder, vbDirectory) = "" Then
MkDir exportFolder
End If
Set db = objAccess.CurrentDb()
' Export all objects to export location with a name based on the type and name of the object
' Export Tables
For Each td In db.TableDefs
If Left(td.Name, 4) <> "MSys" Then ' Skip Microsoft Access system tables
objAccess.DoCmd.TransferText acExportDelim, , td.Name, exportFolder & "Table_" & td.Name & ".txt", True
End If
Next td
' Export Forms
For Each doc In db.Containers("Forms").Documents
objAccess.SaveAsText acForm, doc.Name, exportFolder & "Form_" & doc.Name & ".txt"
Next doc
' Export Reports
For Each doc In db.Containers("Reports").Documents
objAccess.SaveAsText acReport, doc.Name, exportFolder & "Report_" & doc.Name & ".txt"
Next doc
' Export Macros
For Each doc In db.Containers("Scripts").Documents
objAccess.SaveAsText acMacro, doc.Name, exportFolder & "Macro_" & doc.Name & ".txt"
Next doc
' Export Modules
For Each doc In db.Containers("Modules").Documents
objAccess.SaveAsText acModule, doc.Name, exportFolder & "Module_" & doc.Name & ".txt"
Next doc
' Export Queries
For Each qd In db.QueryDefs
' Skip Microsoft Access temporary queries
If Left(qd.Name, 3) <> "~sq" Then
objAccess.SaveAsText acQuery, qd.Name, exportFolder & "Query_" & qd.Name & ".txt"
End If
Next
objAccess.Quit
Set db = Nothing
Set cont = Nothing
Set objAccess = Nothing
MsgBox "Export complete to " & exportFolder, vbInformation
GoTo Exit_Sub
Err_ExportDatabase:
MsgBox Err.Number & ": " & Err.Description
Exit_Sub:
End Sub