Microsoft Access 掲示板

差込印刷について

23 コメント
views
4 フォロー

メールテンプレを作るため、ワードに差し込み印刷したいと考えています。

本当はアクセス内で解決したいですが、メールの長文の中に名前を差込むようなワードの差込印刷のような機能はありませんよね…?

そこで
元になるクエリを作成し、差込印刷ボタンを押して、ワードの差込ファイルも作成できたのですが、VBAでボタンを押すと該当のワードファイルにに該当のクエリを差込して開く。という自動アクションは不可能なのでしょうか。(調べたところ不可能なのかと思っていますが…)

cerophan
作成: 2020/07/29 (水) 22:07:43
最終更新: 2020/07/29 (水) 22:09:21
通報 ...
1

本当はアクセス内で解決したいですが、メールの長文の中に名前を差込むようなワードの差込印刷のような機能はありませんよね…?

やろうと思えばできますよ。

T_メールテンプレート

  • テンプレートID 数値型 主キー
  • タイトル テキスト型
  • 本文 テキスト型

「本文」フィールドに下記のような感じでテンプレート文を入力します。

【氏名】様

ご注文の【品名】の入荷予定日は【入荷予定日】です。
価格は【価格】円です。

株式会社 〇〇
担当 【担当者名】

送信データテーブルは下記とします。

T_メール送信

  • テンプレートID
  • 送信日
  • メールアドレス
  • 氏名
  • 品名
  • 入荷予定日
  • 価格
  • 担当者名

クエリを作成して T_メール送信 と T_メールテンプレート を テンプレートID で結合します。

これをレコードソースとするフォームを作成して、テキストボックスを配置してコントロールソースを下記のように設定します。

=Replace(Replace(Replace(Replace(Replace([本文], "【氏名】", [氏名]), "【品名】", [品名]), "【入荷予定日】", [入荷予定日]), "【価格】", [価格]), "【担当者】", [担当者])

これでフィールドのデータが差し込まれた本文が表示されます。

あとは、下記のような方法でメール送信できます。

■T'sWare Access Tips #463 ~既定のメールソフトで新規メールにデータを添付する方法~

AccessからVBAでメールを送信する2つの方法|アズビーパートナーズ

2
cerophan 2020/07/31 (金) 13:18:11 0029a@1c915

ありがとうございます!メーラーが会社の規定のもので、WEBメーラーなので送信にはつなげられないかもしれませんが、作成の部分は参考にさせていただき、今から作成していきます!
そこで1つ質問です。
差込印刷では以下のようなことが可能でした。アクセスで行うにはどうしたらよいでしょうか。
コントロールソースへの式?クエリの設定?悩んでいます・・

TO欄
To1&","&To2
Cc欄
Cc1&","&Cc2&","&Cc3

メールアドレス欄。複数の場合は間に","が必要。
Ccについて、例えばCc1とCc2しかなければ、Cc3のまえの","が不要となる。

3
cerophan 2020/07/31 (金) 13:41:48 0029a@1c915

ごめんなさい、作成方法は今から確認しようと思いながら違う質問をしたつもりでしたが、同じことで対応できそうですね!すみません。確認します。

4

Cc1, Cc2, Cc3 というフィールドがあるということなら、
Cc欄のテキストボックスのコントロールソースを下記のようにすればいいでしょう。

=[Cc1] & Format([Cc2],"\,&") & Format([Cc3],"\,&")
5
cerophan 2020/07/31 (金) 15:45:01 0029a@1c915

なるほど…本当に勉強になります。素晴らしいですね!

6

あと、メーラーがWEBメールなら、WEBスクレイピングという方法で自動化できるかもしれません(セキュリティがきつく設定してあるとできない場合もありますが)。
「VBA WEBスクレイピング」で検索する解説ページがいろいろ見つかります。

7
cerophan 2020/08/01 (土) 10:13:01 0029a@1c915

メールテンプレを作成してみたのですが、
コントロールソースに
=Replace([メールタイトル],"【タイトル一部】",[タイトル一部])
と入れるとエラーになり、#Type!と表示されています。

ちなみに、
=Replace([メールタイトル],"【タイトル一部】","テスト")

[タイトル一部]
はうまくいきます。

8
cerophan 2020/08/01 (土) 10:32:27 0029a@1c915

クエリに式を入れたらうまくいきました!
WEBスクレイピングの件も、調べてみます。ありがとうございました!!

9
cerophan 2020/08/01 (土) 22:14:21 0029a@1c915

=Replace(Replace(Replace(Replace(Replace([本文], "【氏名】", [氏名]), "【品名】", [品名]), "【入荷予定日】", [入荷予定日]), "【価格】", [価格]), "【担当者】", [担当者])

↑この式を使って、クエリに入力してタイトルはうまくいったのですが、メール本文の式が長すぎてエラーが出ます。
VBAに組み込みたいと思ったのですが、どうやって組み込んだらいいか、答えが見つからない状況です…
方法はありますでしょうか。

10
cerophan 2020/08/01 (土) 23:04:33 0029a@1c915

VBAでイミディエイトウィンドウでテストしてみたところ、どうもフィールドが空のところを追加するとエラーが出るようでした。解決方法を探ってみることにします。

11
hatena 2020/08/01 (土) 23:24:30 修正

どうもフィールドが空のところを追加するとエラーが出るようでした。

Nz関数をつかう。
Replace([本文], "【氏名】", Nz([氏名],""))

あるいは、
テーブルのデザインビューでフィールドの「値要求」プロパティを「はい」に、「空文字列の許可」を「はい」に設定する。

上記の2つの対策のどちらかをしてください。
後者の方がお勧めです。

12
cerophan 2020/08/02 (日) 10:15:29 0029a@1c915

ありがとうございます。
後者を使いたいのですが、空欄が出る欄については空欄がない場合は改行をしたくないという条件を付けたく思っています。そこで、下記の式を作りましたが、データがあってもなくても改行してしまいます…なぜでしょうか。

勉強のため、大変でなければ、Replaceでの正解も教えていただけると助かります。

"{添付2}", Nz(Chr(13) + Chr(10) & [添付2案件], "")),
"{添付3}", Nz(Chr(13) + Chr(10) & [添付3案件], "")),

"{添付4}", Nz(Chr(13) + Chr(10) & [添付4案件], "")) _

13
cerophan 2020/08/02 (日) 10:16:44 0029a@1c915

>空欄がない場合は
⇒空欄の場合は・・の間違いです・・

14
kitasue 2020/08/02 (日) 11:11:00 ce705@e9d43

"{添付2}", Nz(Chr(13) + Chr(10) + [添付2案件], "")),
"{添付3}", Nz(Chr(13) + Chr(10) + [添付3案件], "")),
"{添付4}", Nz(Chr(13) + Chr(10) + [添付4案件], "")) _
でいかがでしょうか。

15
cerophan 2020/08/02 (日) 12:25:24 0029a@1c915

kitasue様

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

16

"{添付2}", Format([添付2案件], Chr(13) & Chr(10) & "&")),
"{添付3}", Format([添付3案件], Chr(13) & Chr(10) & "&")),
"{添付4}", Format([添付4案件], Chr(13) & Chr(10) & "&")) _

だと、[添付2案件] が Null でも "" でもOKです。

18
cerophan 2020/08/03 (月) 10:11:56 0029a@1c915 >> 16

ありがとうございます。こちらを使わせていただきます!
nullは難しいですね…
説明を読んでも未だ、理解しきれておりません。
空白だったら…の条件を設定する際はいつも悩んでしまいます。

17
hiroton 2020/08/03 (月) 09:44:15 46c09@f966d

このQA面白いですね。とても勉強になります

buf = "a" & "1"  'a1'
buf = "a" + "1"  'a1'
buf = "a" & 1    'a1'
buf = "a" + 1    'エラー'
buf = "a" & Null 'a'
buf = "a" + Null 'Null'
buf = "a" & ""   'a'
buf = "a" + ""   'a'

buf = Format("a", "追加文字&")   '追加文字a'
buf = Format("", "追加文字&")    '(空文字)'
buf = Format(Null, "追加文字&")  '(空文字)'

kitasueさん、cerophanさん
VBAは文字列の連結に「+」を許容しますが、特別な理由がない限り「&」を使うべきです。Nz()関数は評価値がNullであることを条件に特別な処理をする関数ですが、評価値の最初にChr(13)がある時点で、これがNullになることがあるのか?と疑問に思ってしまいます。条件分岐で処理をするなら

IIf([添付2案件]<>"",Chr(13) & Chr(10) & [添付2案件])

とするほうが、何をしているのかわかるコードになります。hatenaさん指摘のとおり、データ形式によってはうまく動作しないことも考えられます

Format 関数
改めて眺めていましたが難しい関数ですね。

1 セクションのみ 書式はすべての文字列データに適用されます。
2 セクション 最初のセクションは文字列データに適用され、第 2 のセクションは Null 値と長さ 0 の文字列 ("") に適用されます。

Nullはまだしも「長さ0の文字列("")」は「すべての文字列データ」に該当しないんですねぇ
何もしないためにFormat()関数を使うのはかなり高等テクニックだと思います。さすがhatenaさんですね

20
cerophan 2020/08/03 (月) 10:27:22 0029a@1c915 >> 17

hiroton さん
+と&の違いは気になっていたところでした。詳しく教えていただきありがとうございます。
確かに、IIfだとわたしでも理解できました。
Format関数の解説もありがとうございます。あとでじっくり確認させていただきます。

19
cerophan 2020/08/03 (月) 10:24:15 0029a@1c915

=[Cc1] & Format([Cc2],"\,&") & Format([Cc3],"\,&")

今更ですが、「"\,&") 」これの意味がわかりきれておりません。
解説ページを探すのですが、検索できず…

その他、①nullについて②""の使い方←SQLのWHEREと関係ある??
がなかなか理解できず困っております。

21

今更ですが、「"\,&") 」これの意味がわかりきれておりません。

Format関数の設定は、書式プロパティの設定と同じですので、理解しておくと応用が効きます。

"\,&" ですが、コピーしてVBEとか書式プロパティに貼り付けると "¥,&" となります。(ブラウザ上では¥ は \ に変換されるので)
紛らわしいのでいちおう理解しておいてください。

書式プロパティの設定(=Format関数の設定)では、¥ の後に記述したテキストはそのまま表示されます。
例えば日付などは、
yyyy¥年mm¥月dd¥日 と設定しますよね。¥ の後の年、月、日 はそのまま表示されます。

¥, とするとカンマがそのまま表示されます。 & の箇所にはフィールドのテキストが表示されます。

書式は ; でセクションを2つにわけることができて、
一番目のセクションにテキストがある場合の書式を設定して、
2番目に長さ 0 の文字列か Null値のフィールドの書式を設定します。
2番目のセクションを省略した場合は、テキストがないとき("" または Null)の時は何も表示されません。

¥,& という設定は、テキストがあれば、テキストの前にカンマ、テキストがない(""またはNull)の時は何も表示しないという意味になります。

テキストフィールドの書式を設定する - Access

MSのドキュメントは非常に分かりにくいので、一応読んで実際にいろいろ設定してみて結果を確認して初めてそういうことを言っているかと理解できます。
MSのドキュメントを読んで一発で理解できことは稀です。一応読んでみて、実際にやってみて理解するという繰り返しですね。

22
cerophan 2020/08/03 (月) 12:23:52 0029a@1c915 >> 21

>MSのドキュメントを読んで一発で理解できことは稀です。一応読んでみて、実際にやってみて理解するという繰り返しですね。

MSのドキュメントは理解できなかったため、今までwebの検索結果からMSのドキュメントは、ほぼ避けて通ってきました。検索結果から、他の方のブログ等を参考にするようにしてきました。
hatenaさんのアドバイスに気づかされました。今後はMSのドキュメントをもっと理解する努力をしていきたいと思います。(とは言いつつ今後も質問させていただくことが多いかと思います…申し訳ありません。宜しくお願いいたします。)

23
cerophan 2020/08/03 (月) 12:27:05 0029a@1c915 >> 21

Format関数についてもご解説いただき、よく理解できました。今後も活用していきたいと思います!貴重な知識を、ありがとうございました。