日々の業務で、毎回決まった定型情報をメールで報告するようなタスクがある場合、今回紹介するAccessからOutlookのメールを送信する方法が活用できます。
一般的にAccessによる運用を進めると定期的にデータが蓄積されていきますが、これらデータを毎回メールの本文に手入力するのではなく、自動で出力されメールが自動送信されれば、業務効率を飛躍的に向上させることが期待できます。
そこで、今回はあるお店の前日の売り上げをOutlookメールで報告する機能をAccessに盛り込む方法を紹介します。
サンプルデータについて
サンプルテーブルとして「T_売上」テーブルを作成し、「品名」、「売上」及び「売上日」フィールドを追加します。各フィールドは、「短いテキスト」、「通貨型」及び「日付/時刻型」のデータ型に設定します。
続いて、表1に示すサンプルデータを登録します。
表1 サンプルデータ
品名 | 売上 | 売上日 |
えんぴつ | ¥5,000 | 2022/01/18 |
えんぴつ | ¥6,000 | 2022/01/17 |
消しゴム | ¥4,000 | 2022/01/18 |
消しゴム | ¥5,000 | 2022/01/17 |
ノート | ¥9,500 | 2022/01/18 |
ノート | ¥8,500 | 2022/01/17 |
これでサンプルデータの準備ができましたので、次から前日の売り上げをOutlookメールで報告する機能をVBAでコード実装していきましょう。
Outlookでメール送信するVBAコードの実装
それでは、標準モジュールを作成し、以下のコードを実装してください。
Private Sub SendOutlookMail() 'Outlookオブジェクトの変数宣言 Dim olApp As Object 'メールの参照を代入する変数宣言 Dim SendMail As Object 'メール本文を代入する変数宣言 Dim MailSentence As String: MailSentence = "" '昨日の日付を代入する変数宣言 Dim YesterDay As Date YesterDay = DateAdd("d", -1, Date) 'ADOを用いて、2022/1/18のデータを抽出し、MailSentence変数に代入する。 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset 'カレントデータベースへの接続 Set cn = CurrentProject.Connection 'T_売上テーブルを開く rs.Open "T_売上", cn, adOpenKeyset, adLockOptimistic '2022/1/18のレコードを抽出する rs.Filter = "売上日 = #" & YesterDay & "#" '何日付のデータかをメール本文に記載する MailSentence = MailSentence + Format(YesterDay, "yyyy/mm/dd") + "の売上は以下のとおりです。" & vbCrLf 'ループ文でメール本文を作成する Do Until rs.EOF = True Or rs.BOF = True 'MailSentence変数に、品名、売上を代入し、改行も加える MailSentence = MailSentence & rs!品名 & ": " & Format(rs!売上, "#,###円") & vbCrLf rs.MoveNext Loop 'T_売上テーブルを閉じ、データベースを閉じる rs.Close cn.Close: Set cn = Nothing 'Outlookの起動 Set olApp = CreateObject("Outlook.Application") 'メールアイテムを作成する Set SendMail = olApp.CreateItem(0) 'メールの本文を作成する With SendMail '送信先のメールアドレスを指定する。 .Recipients.Add("leastinfostudy@gmail.com").Type = 1 'メールのタイトル .Subject = "【TEST】_" & Format(YesterDay, "yymmdd売上データ") 'メールの本文 .Body = MailSentence 'メールの送信 '.Send '誤送信を防ぐためコメントアウトをしています。 '確認用としてOutlookを表示する .Display End With End Sub
少し長めのコードですが、一つずつ内容を確認していきましょう。
まずは、Outlookオブジェクト、メールの参照、メール本文に記載する内容を代入する変数宣言をします。また、「昨日の日付」を格納するための「YesterDay」変数も宣言します。この際、YesterDay変数にはDateAdd関数を用いて、昨日の日付を代入します。
ここで、DateAdd関数については以下の記事をご参考にしてください。
ADOによるレコード処理をするために、変数宣言をし、カレントデータベースへの接続、「T_売上」テーブルを開くコードを追加しています。
今回は、「昨日の売り上げデータ」をメール報告する目的のため、Filterプロパティを用いて対象レコードを抽出しています。
Filterプロパティの使い方は以下の記事をご参考にしてください。
次に、メールの本文に記載する内容を変数に代入します。
Do Loop文を用いて、昨日の売上レコードの品名、金額を繰り返し変数に追加していきます。その後、対象レコードがなくなった後、「T_売上」テーブルを閉じ、カレントデータベースへの接続を切ります。
続いて、Outlookでメールを送るために、「CreateObject関数」を用いてOutlookアプリケーションを起動します。さらに、CreateItemでメールアイテムを作成します。この時、CreateItemメソッドの引数を「0」に指定することでメールアイテムを作成することになります。続いて、With文内でメールアイテムのプロパティを設定します。Recipientsプロパティは送信先のメールアドレスを、Subjectプロパティではメールのタイトルを、Bodyプロパティでメール本文を指定します。そして、Sendプロパティでメールを送信しますが、誤送信を防ぐため、今回のサンプルではコメントアウトをしています。
Sendプロパティの代わりとして、Displayメソッドを設定し、作成したメールを表示するようにしました。
作成した機能を実行すると図1の結果(実行日は2022/1/19です。)が得られます。
このようにして、AccessからOutlookのメールを自動作成し、送信することができます。
まとめ
今回は、Accessのデータを用いて、自動でOutlookメールを作成し送信する機能をVBAで実装しました。日々のルーチン業務で同様の事例があった場合には、本記事を参考に業務効率の改善を図っていただければと思います。
また、専門書でも、VBAコードの書き方が詳しく説明されていますので、お手元に1冊用意されてAccess開発に臨まれることをオススメします。
スポンサーリンク
コメント