テーブル 「T_実績」 をもとに クエリ 「Q_今日の実績」 があります。
「Q_今日の実績」 は[品名] [品番] [受付日]
フォーム1 には、テキストボックス txt_受付日 と コマンドボタン1 があり
txt_受付日 に入力した日付で抽出したクエリ「Q_今日の実績」の結果を
メールの本文に記載し、送信したいです。
宛先:aaa@aaa
CC:bbb@bbb
本文:
[受付日]の実績、更新されました。
鉛筆 cg022-25 (改行したい)
消しゴム TG56
定規 0389235
(↑品名 ↑品番 日によって件数は増減する。0件のときは送信しない)
いろいろなサイトを見て自分で作ってみましたが、抽出条件がないクエリの時しか送れず、また、クエリの結果が10件の場合は10通のメールを送信してしまいます。
よろしくお願いいたします。
うーん、コードを見る限りレコードが10件あったら10通というつくりにはなっていませんね。
これは、ボタンがクリックされたときに1度だけ実行するようになっているのですよね?
とりあえず、他の部分に対応しました。
・0件のときは送信しない
・本当は[受付日]を入れたい(レコードがあれば出るはず)
・改行したい
Option Compare Database Private Sub コマンド1_Click() Dim DB As Database Dim RS As Recordset Dim 件名 As String Dim 本文 As String Set DB = CurrentDb Set RS = DB.OpenRecordset("Q_今日の実績") '検索結果の確認:街頭情報がなければ終了 If RS.RecordCount = 0 Then MsgBox "該当するデータがありません" Exit Sub End If '件名の作成 件名 = "実績更新のお知らせ" '本文の作成 本文 = "[" & RS!受付日 & "]の実績、更新されました。" Do Until RS.EOF '本文の作成 本文 = 本文 & vbCrLf & RS!品名 & RS!品番 RS.MoveNext Loop 'メールの送信 DoCmd.SendObject acSendNoObject, acSendNoObject, acFormatTXT, "aaa@aaa", , , 件名, 本文, False RS.Close: Set RS = Nothing End Sub
本当にレコード数だけメールが送信されるか、もう一度確認いただけますか。
また、日付が入らない場合はクエリの中身を提示ください。
(そこに日付がなければ追加すればOKなはずです。)
コメントが無効ですので回答で失礼します(この回答に関するポイントは不要です)。
仕様の確認等コメントのほうが良いので有効にお願いできるでしょうか。
すでに、メールが送信できるようにはなっているのですから、差し支えのない範囲で
(アドレスを匿名にするなどして)コードを公開してはどうでしょうか。
おそらくコードの部分的な修正で対応できるのではないかと思います。
Mook様 ありがとうございます。Access VBA とともに 「はてな」の利用方法もあまりわかってなく、Mook様のご返答助かりました。ありがとうございます。
Private Sub コマンド1_Click()
Dim DB As Database
Dim RS As Recordset
Dim 件名 As String
Dim 本文 As String
Set DB = CurrentDb
Set RS = DB.OpenRecordset("Q_今日の実績")
Do Until RS.EOF
'件名の作成
件名 = "実績更新のお知らせ"
'本文の作成
本文 = "本日実績、更新されました。" & vbCrLf _ '本当は[受付日]を入れたい
& RS!品名 & RS!品番
RS.MoveNext
Loop
'メールの送信
DoCmd.SendObject , , acFormatTXT, "aaa@aaa", , , 件名, _
本文, False
RS.Close: Set RS = Nothing
End Sub
上記はテキストボックスに日付を入れて抽出することがわからなかったので、その部分はできていません。よろしくお願いいたします。
うーん、コードを見る限りレコードが10件あったら10通というつくりにはなっていませんね。
これは、ボタンがクリックされたときに1度だけ実行するようになっているのですよね?
とりあえず、他の部分に対応しました。
・0件のときは送信しない
・本当は[受付日]を入れたい(レコードがあれば出るはず)
・改行したい
Option Compare Database Private Sub コマンド1_Click() Dim DB As Database Dim RS As Recordset Dim 件名 As String Dim 本文 As String Set DB = CurrentDb Set RS = DB.OpenRecordset("Q_今日の実績") '検索結果の確認:街頭情報がなければ終了 If RS.RecordCount = 0 Then MsgBox "該当するデータがありません" Exit Sub End If '件名の作成 件名 = "実績更新のお知らせ" '本文の作成 本文 = "[" & RS!受付日 & "]の実績、更新されました。" Do Until RS.EOF '本文の作成 本文 = 本文 & vbCrLf & RS!品名 & RS!品番 RS.MoveNext Loop 'メールの送信 DoCmd.SendObject acSendNoObject, acSendNoObject, acFormatTXT, "aaa@aaa", , , 件名, 本文, False RS.Close: Set RS = Nothing End Sub
本当にレコード数だけメールが送信されるか、もう一度確認いただけますか。
また、日付が入らない場合はクエリの中身を提示ください。
(そこに日付がなければ追加すればOKなはずです。)
Mooks様、どうもありがとうございます。レコード数だけメール送信されることなく、送ることができました。お礼が遅くなり申し訳ありません。
ただ、テキストボックス[txt受付日]に入力した日付で抽出をしたいのですが、
Set RS = DB.OpenRecordset("Q_今日の実績")
で、パラメータが少なすぎます。1を指定してください
とエラーになってしまいます。
SELECT T_実績.品名, T_実績.品番, T_実績.受付日
FROM T_実績
WHERE (((T_実績.受付日)=[forms]![フォーム1]![txt受付日]))
ORDER BY T_実績.受付日 DESC;
よろしくお願いいたします。
Mooks様、どうもありがとうございます。レコード数だけメール送信されることなく、送ることができました。お礼が遅くなり申し訳ありません。
ただ、テキストボックス[txt受付日]に入力した日付で抽出をしたいのですが、
Set RS = DB.OpenRecordset("Q_今日の実績")
で、パラメータが少なすぎます。1を指定してください
とエラーになってしまいます。
SELECT T_実績.品名, T_実績.品番, T_実績.受付日
FROM T_実績
WHERE (((T_実績.受付日)=[forms]![フォーム1]![txt受付日]))
ORDER BY T_実績.受付日 DESC;
よろしくお願いいたします。