PR

AccessからOutlookのメールを送信する方法

VBA

日々の業務で、毎回決まった定型情報をメールで報告するようなタスクがある場合、今回紹介する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です。)が得られます。

図1 AccessからOutlookメールを作成した結果

このようにして、AccessからOutlookのメールを自動作成し、送信することができます。

まとめ

今回は、Accessのデータを用いて、自動でOutlookメールを作成し送信する機能をVBAで実装しました。日々のルーチン業務で同様の事例があった場合には、本記事を参考に業務効率の改善を図っていただければと思います。

また、専門書でも、VBAコードの書き方が詳しく説明されていますので、お手元に1冊用意されてAccess開発に臨まれることをオススメします。

スポンサーリンク

Kindle Unlimitedにサインアップして無料体験に登録する
Kindle Unlimitedに登録すると、人気のシリーズ、ベストセラー、名作などに好きなだけアクセスして、シームレスなデジタル読書体験を実現できます。

コメント

タイトルとURLをコピーしました