• 締切済み

Accessでメールの文章を作るときの方法

Access2003で、インターネットショップの受注管理を作っています。 注文があった時、お客様に注文内容や送り先の入ったメールを送りたいのですが、本文の作成方法で行き詰ってしまいました。 テーブルは注文者マスタと受注明細マスタがあって、それぞれの注文番号フィールドが1対多のリレーションシップでつながっています。 vbaを使い、ADOでテーブルの内容を読みながらつないでいく方法をとったのですが、コードが300行以上になってしまって、とても見づらく効率が悪いと思います… バグのない長いコードを書くのがとても苦手なので、コードは短く、後で簡単に調整できるような方法を探しています。 このような場合、どんな方法をとるべきでしょうか? まだよくわからないのですがよろしくお願いします。

みんなの回答

回答No.3

こんばんは。 コードを拝見させていただきました。 私も同じようなコードしか記述出来ません。 (いや、私はそれよりひどいコードしか書けないでしょう!?) で、コードを簡潔にする方法が思い浮かびません。 (私でしたら、このまま満足してしまいそうです。) 状況が具体的に見えてきましたのでこのまま熟練者の方々のご回答を待つか、 補足質問のように具体的なコードを提示して再質問されてみてはいかがでしょうか? (熟練者でないのに口を挟んでしまいました。すみません。)

yuri0987
質問者

お礼

こんにちわ 返信ありがとうございます。 そ、そんなことはないですよ。 今回は解決しませんでしたが、考え方を転換できた気がします。 しばらくよく考え直して、いい解決方法が無かったらまた質問をしたいと思います。 (情報を小出しに質問するのは良くありませんでした。次は質問の書き込みもすっきりと書き直さなければいけませんね。反省…) ありがとうございました。

回答No.2

こんにちは。 > 今は、メールの本文を作るために、クエリとかは使っていないのですが、 > それらも活用していけばもっと簡単になるかなと考えています。 クエリ? すみませんが、仰る意味が分かりません。 それから、メールの本文を作成するのにそれほど長いコードは必要ないと思います。 下記は Outlook を操作する例ですが、Body (本文)の編集が若干長くなるかもしれませんが、 300 行以上のコードになるとは考えられません。 (例) Public Sub Test1() Dim objOutlook As Object Dim objMail As Object Dim MyBody As String Set objOutlook = CreateObject("Outlook.Application") Set objMail = objOutlook.CreateItem(olMailItem) MyBody = "A" & vbCrLf & "B" & vbCrLf & "C" With objMail .To = "メールアドレス" .Subject = "タイトル" .Body = MyBody .Display End With Set objMail = Nothing Set objOutlook = Nothing End Sub ※※もう少し詳細を教えてください。※※

yuri0987
質問者

お礼

返信ありがとうございます ひどいコードでとても恥ずかしいですが私の作ったものを貼り付けました。 私が短くしたいと思っている部分は主にこの部分です。

yuri0987
質問者

補足

こんにちわ 説明が足りないようですみません。 クエリを使うというのは、あまり大きな意味はないです。(すまません、適当に言ってしまいました) 私が作ろうとしているメールは、インターネットショップのカートで注文すると自動で返信されるような注文内容の確認のメールです。 うまく説明できないので、申し訳ないですが私の書いたコードを見てください。 メール送信部分はこのようにしています。 送信というより、通常使うメールソフトに渡したいのでこうしました。 Private Sub cmd受注確認_Click() Dim Mail As typMailformat Mail = subメール生成(Me![注文番号], 種類_受注確認) With Mail DoCmd.SendObject , , , .TO, , , .Subject, .MailMessage, True  End With End Sub subメール生成から帰ってくる中身は以下のようなものです Type typMailformat MailMessage As String Subject As String TO As String End Type 問題の本文生成部分は下のようにしています。 どうにか短くしたいと思っているのですが… 全部コピペすると本当に300行になってしまうので途中省略しています。 adoRSは注文者マスタ、adoRSJyuは受注明細マスタです。 Function subメール生成(str注文番号 As String, byt生成メール種類 As Byte) As typMailformat (中略 宣言部分と設定の読み込み) (注文者情報を作ります) strMailMessage = _ IIf(adoRS!法人名 <> "", adoRS!法人名 & " 御中" & vbCrLf, "") & _ IIf(adoRS![所属部署・役職名] <> "", adoRS![所属部署・役職名] & " ", "") & _ adoRS!名前1 & " " & adoRS!名前2 & " 様" & vbCrLf & _ vbCrLf & _ strMailHeader & _ vbCrLf & _ "[ご注文番号] " & adoRS!注文番号 & vbCrLf & _ "[ご注文日] " & adoRS!注文日 & vbCrLf strMailMessage = strMailMessage & vbCrLf & _ "▼ご注文者様情報" & vbCrLf & _ String(60, "=") & vbCrLf & _ "[お名前] " & adoRS!名前1 & " " & adoRS!名前2 & vbCrLf & _ "[フリガナ] " & adoRS!フリガナ1 & " " & adoRS!フリガナ2 & vbCrLf & _ IIf(adoRS!法人名 <> "", "[法人名] " & adoRS!法人名 & vbCrLf, "") & _ IIf(adoRS![法人名-カナ] <> "", "[法人名フリガナ] " & adoRS![法人名-カナ] & vbCrLf, "") & _ IIf(adoRS![所属部署・役職名] <> "", "[所属部署・役職名] " & adoRS![所属部署・役職名] & vbCrLf, "") & _ "[郵便番号] " & adoRS!郵便番号 & vbCrLf & _ "[ご住所] " & adoRS![住所-都道府県] & adoRS![住所-市区町村] & adoRS![住所-以降の住所] & adoRS![住所-アパート・ビル] & vbCrLf & _ "[電話番号] " & adoRS!電話番号 & vbCrLf & _ "[日中のご連絡先] " & adoRS!連絡のとれる電話番号 & vbCrLf & _ "[FAX番号] " & adoRS!FAX番号 & vbCrLf & _ "[メールアドレス] " & adoRS!メールアドレス & vbCrLf & _ IIf(adoRS!通信欄 <> "", "[通信欄] " & vbCrLf & adoRS!通信欄, "") & vbCrLf (中略 この後に、ご注文者様情報とほぼ同じ内容の配送先情報、配達時間指定などの項目が続きます) ※字数制限に引っかかったのでお礼に続かせてください

回答No.1

こんばんは。 もしかして、このようなこと↓をお知りになりたいのでしょうか? (構造化プログラミング) http://ews2.cc.niigata-u.ac.jp/~takeuchi/tbasic/Intro2Basic/Structure.html

yuri0987
質問者

お礼

GreatDragonさん返信ありがとうございます。 リンク先、とても勉強になりました。 よく頭に入れて作り直せばもっと短いコードで済むかもしれません。

yuri0987
質問者

補足

今は、メールの本文を作るために、クエリとかは使っていないのですが、それらも活用していけばもっと簡単になるかなと考えています。 ですがいまいち良い方法が思い浮かびません… 熟練者の方ならこのような場合どのようにされるのかヒントを頂きたいです。 長くなりましたが質問の補足ということでよろしくお願いいたします。

関連するQ&A