はじめに
Access VBAを使用して、「保存済みのインポート操作」および「保存済みのエクスポート操作」を別のACCDBファイルへ移行する方法について説明します。Accessにはこれらの操作を直接コピーする機能がないため、VBAを使用してXML形式で定義をエクスポートし、それを別のデータベースにインポートする手順を紹介します。
背景
Accessでデータベースを移行する際、「保存済みのインポート/エクスポート操作」も移行する必要がありましたが、標準機能では対応していませんでした。そのため、VBAを使用してこの移行プロセスを実現しました。
環境
- Microsoft Access
手順
1. エクスポート元のACCDB(a.accdb)での操作
まず、エクスポート元のデータベース(a.accdb)で、移行したいインポート/エクスポート操作の定義をXMLファイルとして出力します。
Function exportSettingXML()
Dim Prj As CodeProject
Dim Obj As ImportExportSpecification
Dim strExportName As String
' エクスポート操作、またはインポートの名前を指定
strExportName = "対象の操作名"
Set Prj = CurrentProject
' XMLで定義を取得する
Set Obj = Prj.ImportExportSpecifications(strExportName)
strXML = Obj.XML
' 変更後のXMLをファイルに出力
Dim filePath As String
filePath = CurrentProject.Path & "\ExportSpec.xml"
Open filePath For Output As #1
Print #1, strXML
Close #1
End Function
このコードでは、指定されたインポート/エクスポート操作の定義をXML形式で取得し、ExportSpec.xml
というファイルに出力します。
2. インポート先のACCDB(b.accdb)での操作
次に、インポート先のデータベース(b.accdb)で、出力されたXMLファイルからインポート/エクスポート操作を復元します。
Function ImportExportSpecFromXML(xmlFilePath As String, specName As String) As Boolean
Dim Prj As CodeProject
Dim Obj As ImportExportSpecification
Dim strXML As String
Dim stream As Object
On Error GoTo ErrorHandler
' XMLファイルを読み込む
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2 ' adTypeText
stream.Charset = "Shift_JIS"
stream.Open
stream.LoadFromFile xmlFilePath
strXML = stream.ReadText
stream.Close
Set stream = Nothing
' 指定された名前のインポート/エクスポート仕様を取得
Set Prj = CurrentProject
Set Obj = Prj.ImportExportSpecifications(specName)
' インポート/エクスポート仕様が存在しない場合は作成
If Obj Is Nothing Then
Set Obj = Prj.ImportExportSpecifications.Add(specName, strXML)
Else
' インポート/エクスポート仕様を更新
Obj.XML = strXML
End If
ImportExportSpecFromXML = True
Cleanup:
Exit Function
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
ImportExportSpecFromXML = False
Resume Cleanup
End Function
Sub TestImportExportSpecFromXML()
Dim xmlFilePath As String
Dim specName As String
xmlFilePath = CurrentProject.Path & "\ExportSpec.xml"' a.accdbが出力したXMLファイルのパスを指定
specName = "対象の操作名" ' 上書きまたは作成するインポート/エクスポート操作の名前を指定
If ImportExportSpecFromXML(xmlFilePath, specName) Then
MsgBox "インポート/エクスポート操作を更新または作成しました。", vbInformation
Else
MsgBox "インポート/エクスポート操作の更新または作成に失敗しました。", vbCritical
End If
End Sub
このコードでは、指定されたXMLファイルを読み込み、インポート/エクスポート操作を復元または新規作成します。
注意点
- XMLファイルの文字コードは、環境によって
Shift_JIS
またはUTF-8
を適切に選択してください。 - インポート先のデータベースで、同じ名前のインポート/エクスポート操作が既に存在する場合は、上書きされます。
- 新規作成部分のテストは不十分ですので、必要に応じて修正してください。
まとめ
この方法を使用することで、Accessの「保存済みのインポート/エクスポート操作」を別のACCDBファイルへ移行することができます。Accessの標準機能では対応していないため、VBAによる自動化は非常に有効です。