Microsoft Access 掲示板

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

3 コメント
views
4 フォロー

お世話になります。
フォームに記入し、作成したボタンを押すとテーブルに追加されるという流れの中に、
新規レコードの中で入力している日時、担当者名をWordへ差込したいと考えています。
(作成したボタンを押すと、現在ではテンプレのwordファイルをコピーしてくると同時にwordファイル名を日時にリネームしている、という流れです。VBAでコピー部分は書いております。)

完成形としてはボタンを押すだけでwordファイルのコピーとリネーム、wordファイル内に値の挿入が自動でされるというイメージなのですが、検索して調べると
・wordへの差し込み機能はあるが、レコードをすべて差し込む方法を説明しているページばかりである。
・VBAで記述する必要があるが、wordの機能で差し込む方法を解説したページばかりである。
とハードルが2つあるので、これを解決する方法が知りたいです。

詳しい方、教えていただけますと幸いです。
どうぞよろしくお願いいたします。

tanappe
作成: 2022/01/20 (木) 01:43:53
通報 ...
1
hiroton 2022/01/20 (木) 08:46:04 3c477@f966d

1.「レコードをすべて差し込む方法」で最後のレコード(新規レコード)だけを対象にする

2.作業テーブルを用意し「レコードをすべて差し込む方法」で、常に1レコードだけを対象にする

3.Word文章(テンプレートファイルのコピー)のテキストを直接置き換える

ゼロからWordの差し込み印刷を設定する方法も検索すれば見つかりそうですが必要ないですよね?
(2)は少し特殊ですが、それぞれ簡単な単語で検索して見つかったページをつまみ食いした程度で出来そうな内容です。それぞれメリット・デメリットはあります。どのような問題があり、どういった手法を望んでいるんですか?

2
tanappe 2022/02/08 (火) 19:10:41 a7122@43b82

ご回答ありがとうございます。
1→2→3の順で実行するという認識でおります。
作業テーブル(中間テーブル)を用意するという方法は思いつきませんでした。プログラム実行の都度上書きするということで対応しました。1レコードだけを対象にするのはSELECT TOP1でいけました。

https://oshiete.goo.ne.jp/qa/7681553.html
あたりを参考に差し込み部分のVBAを書こうと考えております。

ありがとうございました。

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のバージョンによって変わる可能性があります