Microsoft Access 掲示板

フォームから新規レコードを追加しつつWordへ差込したい / 3

3 コメント
views
4 フォロー
3
hiroton 2022/02/09 (水) 10:17:19 0741c@f966d

もっと基本的なことの確認が漏れていたんですが

差し込み印刷用のデータ ソースとしてテーブルやクエリを使用する

SELECT TOP1のような)静的なクエリが組めるのであればそのままデータソースにできるのでは?


ついでにサンプルを組んでいたらいろいろハマったのでその辺の情報を追記しておきます

Word文書に差し込みの設定をしておくと、ファイルを開く時に確認ダイアログ(「この文書を開くと、次の SQL コマンドが実行されます。」)が表示されます

回避方法としてレジストリを修正する方法がありますが、影響範囲が大きく望ましくありません。書式の設定だけしたWordファイルを用意して、データソースは動的に読み込むとよさそうです

MailMerge.OpenDataSource メソッド (Word)

一度差し込み設定をしたWord文書を作成したら、差し込み印刷の開始→標準の Word 文書でデータのリンクを解除して保存しなおします(開いてもダイアログの出ない文書にする)
都度ACCESS VBAからWord文書を開く→データソースのリンクをします

Dim wordFilePath As String
Dim objWord As Object
Dim objDoc As Object

wordFilePath = "C:\データ\さしこみ.docx"

Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Open(wordFilePath)

Dim accessFilePath As String
Dim strConnection As String
Dim strSQL As String

accessFilePath = Application.CurrentProject.FullName
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & accessFilePath & ";"
strSQL = "SELECT * FROM `qさしこみ用`"

With objDoc.MailMerge
    .OpenDataSource _
        Name:=accessFilePath, _
        LinkToSource:=True, _
        Connection:=strConnection, _
        SQLStatement:=strSQL
    .ViewMailMergeFieldCodes = False
End With

Set objDoc = Nothing
Set objWord = Nothing

上記リンク先では

Access のデータを検索する場合は、文字列 "Table" または "Query" の後にテーブルまたはクエリの名前を指定します。

とありますが、hirotonの環境(office 2013)ではうまくいきませんでした。サンプルのコードではファイル指定が.mdbなので、古い形式でないとダメなのかもしれません
また、Provider=Microsoft.ACE.OLEDB.12.0;この指定部分はACCESSのバージョンによって変わる可能性があります

通報 ...