Microsoft Access データベースからすべてのデータをエクスポートする

適用対象: Access 2024、Access 2021

このトピックでは、IT 管理者が Microsoft Access データベースからテキスト ファイルにすべてのデータとオブジェクトをエクスポートし、他のツールで使用できるようにする方法と、データの移植性をサポートする方法について説明します。

テーブルに格納されているデータについては、Excel などのアクセス ウィザードを使用して他のさまざまな形式にデータをエクスポートできます。「Excel にデータをエクスポートする」または「テキスト」を参照してください。「 データをテキスト ファイルにエクスポートする」を参照してください。

次の手順では、 DoCmd.TransferText メソッド コマンドを使用して VBA コードを使用してオブジェクトをエクスポートしてテーブル データをエクスポートする方法と、他のオブジェクトの Application.SaveAsText コマンドを使用する方法を示します。

指定されたコードは、データベースとコピー先フォルダーへの完全なパスを使用して呼び出すことができる関数を作成します。 次に、データベース内の各オブジェクトのテキスト ファイルが作成されます。このファイルには、テーブルからのデータと、フォームやレポートなどのすべてのユーザー作成オブジェクトの定義が含まれます。

このプロセスでは OLE オートメーションが使用されるため、コードは PowerShell を使用するか、C# などの .NET 言語を使用して記述することもできます。 この例では、VBA を使用します。

  1. 新しいデータベースを作成します。
  2. 新しいモジュールを作成します。
  3. 次のエクスポート データベース コードをコピーしてモジュールに貼り付けます。
  4. エクスポートするデータベースごとに、イミディエイト ウィンドウに次のコマンドを入力します。

    ExportAccessDatabase "_Full path to database_", "_Folder to contain exported objects_"
    1. エクスポートされたデータベースの名前を持つ新しいフォルダーがターゲット フォルダーに作成されることに注意してください。 これは、エクスポートされた各データベースの内容を個別のフォルダーに保持しながら、複数のデータベースを同じターゲット フォルダーにエクスポートできるようにするためです。
    2. エクスポートするデータベースにスタートアップ フォームまたは AutoExec マクロが含まれている場合、スタートアップ アクションがエクスポート プロセスに干渉する可能性があるため、データベースのスタートアップ フォーム プロパティをリセットし、ExportAccessDatabase を呼び出す前に AutoExec マクロを削除または名前変更する必要があります。
  5. このプロセスをさらに自動化する場合は、フォルダーへのパスを指定し、フォルダー内のすべてのデータベースを列挙し、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