Office365の導入で社員に一気に身近になったMS-Access、使い始めてくるとあれもこれもと使ってきます。使い始めの頃は喜んで使っているのですが、少し慣れてくると「これ自動化できないの?」と聞いて来ます。特にアラームメールは自分でオペするのではなくスケジューラーで起動してメールで送ってきて欲しいそうです。まずはアクセスからメールを発信する手段をまとめます。
コンテンツ
最終的にやりたい事のイメージ
- スケジューラーからAccessを起動する
- AutoExecマクロでアラームリストを集計する
- アラームリストが0件ならば「yyyy/mm/ddのアラームリストはありません。」と本文のみのメールを発信する。
- アラームリストが1件以上であればアラームリストをエクセル出力する。
- アラームリストを「アラームリスト_yyyymmdd.xlsx」の形にリネームする。
- 件名の最後に(mm/dd)を付けて、「アラームリスト_yyyymmdd.xlsx」を添付してメール発信する
アクセスからメールを発信する手段
スケジューラーやファイルのリネームは一番最後に説明するとして、まずはメール発信についてまとめます。
真面目にプログラマをしていた2000年前後は「BASP21」に大変お世話になっていました(2007年6月で更新が止まっていますが今でも使えると思います)。今現在で考えると、Microsoftが提供しているライブラリを使用してメール発信を実装するのが情報の質と量ともに豊富だと思います。参考文献をざっとまとめると以下の通り。
DoCmd.SendObject メソッド
Microsoft Docs「DoCmd.SendObject メソッド (アクセス)」
マクロで「データベースオブジェクトの電子メール送信」を設定し、マクロを Visual Basic に変換すると分かり易いです。
DAOを使ったメール発信でメールを簡単にOutlook(標準設定のメールクライアント)から送信する事ができます。Outlookを使っていて社内向けのアラームメールで良ければこれが一番簡単だと思います。
関連記事:「DoCmd.SendObjectを使ってアクセスのマクロから電子メールを発信する【Access マクロ】」
Microsoft Outlook Object Library
Microsoft Docs「Outlook VBA リファレンス」
Outlook Visual Basic for Applications を使用する方法。名前の通り Outlookを使います。
Microsoft CDO for Windows Library
Microsoft Developer Network「CDO(全般)」
CDO.Message を使い直接メールを発信する方法、Outlookを使っていなければこの方法を選択するべきです。VBScriptからも使えるのでコマンドライン(cscript.exe)をスケジューラーから直接起動する事もできます。
関連記事「CDO.Messageを使ってアクセスのマクロから電子メールを発信する【Access マクロ】」
Microsoft 以外のコンポーネンツを使う
2000年頃かなり使い込んだ「Basp21」が有名です。
当時はメールの送信ばかりでは無く、画像データをデータベース(BLOB型)にアップロードとダウンロードに使っていたので細かいところまで使用経験があります。
関連記事:「Basp21を使ってアクセスのマクロから電子メールを発信する【Access マクロ】」
まとめ
Outlookさえ使っていれば、おそらくどれを選択したとしても「最終的にやりたい事のイメージ」については実装できると思っています。
Outlookを使っていないのであれば、CDO.Message か Basp21 を選択する事になるかと。別途ソースプログラムをまとめて行こうと思います。
この記事へのコメントはありません。