Access 内から差し込み印刷プロセスを自動化しようとしています。ボタンをクリックすると、現在のデータベース (accdb) をデータ ソースとして指定する VBA が実行され、次のコードに従って SQL が実行されます。
'Set up Word
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
'Make visible, open specified doc to merge
With objWord
.Visible = True
.Documents.Open strDocName
End With
'Set the data source path
Dim docPath As String
docPath = CurrentProject.Path & "\" & CurrentProject.Name
'Open the merge data source - simplified
objWord.activedocument.mailmerge.opendatasource _
Name:=docPath, _
SQLStatement:=strSQL
strDocName と strSQL が渡され、有効で機能的なコンテンツが含まれています。
Word を開いて表示し、マージ先のテンプレートを開くことに成功します。ただし、その時点で、データ ソースの確認を求めるメッセージが表示され、可能なデータ ソースのリストが表示されます。[すべて表示] チェックボックスをクリックすると、ODBC (.mdb、.accdb) 経由で MS Access データベースまでスクロールダウンし、リストから選択できます。
次に、「ODBC Microsoft Access Driver のログインに失敗しました」というタイトルのボックスが表示され、「ファイルが見つかりませんでした: "[データベース フォルダーへのパス]/[格納フォルダーの名前].mdb"」というメッセージが表示されます。
したがって、データベースが C:\Temp にある場合、エラー パスは「C:\Temp.mdb」となります。Access データベースを別のフォルダーに移動すると、エラー パスが更新され、含まれているフォルダーに基づいて、それに応じて名前が付けられた mdb ファイルが検索されます。
関連性があるかどうかはわかりませんが、テンプレートから新しいドキュメントを生成するのではなく、テンプレート自体を編集するモードでテンプレートを開いているようです。
ここで何かが足りないのですか、それとも誰かアイデアがありますか?
乾杯
以下の Remou の助けを借りて、Access への直接リンクを断念し、Remou の提案されたリンクのコードを使用して一時テキスト ファイルに出力し、そこからマージしました。
コードを変更して CurrentBackendPath() を削除し、この関数への唯一の参照を次のように変更しました。
Private Function GetStartDirectory() As String
'GetStartDirectory = CurrentBackendPath() & "mm\"
GetStartDirectory = CurrentProject.Path & "\mm\"
End Function
他に使用した唯一の変更は、目的に合わせてコードを変更することでした。回答をくださった皆様に改めて感謝いたします。私がそうするのに十分な評判があれば、Remouの反応に賛成票を投じます!