Linuxサーバより愛を込めて。

Linux(Ubuntu)サーバとダーツを愛する中年サラリーマンの日記。

Microsoft Office

AccessのVBAを使ってメールを直接送信~Microsft CDO編~

2015/04/11

Microsoft CDOを使うハメになったきっかけ

取引先に毎週送信するExcelファイルがありまして。

 

日々データを入力しておいて決まった曜日に1週間分を別名保存+原紙の初期化して、その別名保存したファイルを送っているんです。

 

最初はチマチマ手作業でやっていたんですが「こんなもんいちいちやってられるか!」+「ボタンクリックで全部できればほかの人に託せるじゃん?」という思いからVBAを使ったプログラムで自動化しておりました。(やったのは自分ではなく上司ですが)

 

使用していた手法は「dzsmtp.dll」を使用したメールサーバ経由の直接送信だったんですが、会社のシステムが入れ替わりOSがXP→7へ変わったのと同時にAccessも2003から2010へバージョンアップした際に(この辺りは以前少し日記代わりでかいたような)メール送信が動かなくなっていたんです。

 

もっと早く直したかったんですが、最近倉庫内の作業応援が忙しくてなかなか時間が取れなかったので今頃となってしまったというわけです。

 

では前置きが長くなりましたが別の手法として「Microsoft CDO」を用いたメール送信に取り組みたいと思います。

 

Microsft CDOの概要と使用法

まずは概要を。

簡単に言えば「プログラムから直接メールサーバを経由してメッセージを送信する」ための仕組みと言えるでしょう。

 

概要とはいえ単純すぎますかね(汗

 

詳しいことはマクロソフトのサイトをご覧頂いたほうがわかりやすいと思うので参考までに。

 

これを使えば正に「ボタンをクリックするだけで簡単メール送信♪」みたいな機能を実装できるわけですね。

 

うちの事務所、パソコンが得意でない方ばかりなのでこういう機能はとても助かります。

 

事前準備で参照設定を行う

まずは何より事前準備を。

 

調べたところ二通りあるようで一つは参照設定を予め行っておく、もう一つは実行時にバインディングするようにコード内に記述するというものなんですがここでは参照設定で進めます。

 

やり方はVBEを起動させた状態で「ツール」→「参照設定」とクリックしていきます。すると参照設定用のウィンドウが開きますので以下のように「Microsoft CDO for Windows 2000 Library」を探し出してチェックを入れればOK!

 

参照設定

 

事前準備はこれだけ。では実際のコードへと移りましょう。

 

コードを見てみる

 

順を追って見てみましょう。といっても主なセクションは2つだけ。

 

まず前半はSub メール送信() ~ End Subで囲まれている部分。ここはメールサーバや送信アドレス、宛先に件名に本文に・・・と今回送信するメールに関する記述を行ってメールを送信を指示するセクションになっています。

 

この部分の最後のほうに「SendMailByCDO(~)」という関数が出てきまして、その定義を行っているのが後半のPrivate Function ~ End Functionで括られた部分になる、というわけです。

 

こんな簡単に使えるならもっと早いうちにシステムを直せてたような・・・

 

まとめ

今回の作業はとても簡単なものでした。いや、中身を深く理解しようと思ったらめんどくさいんでしょうが今回はひとまず動けばOK!ぐらいのノリで試したものなので。

 

忘れないうちにまとめておくと

 

  • Windows標準のライブラリを使用することでVBAから直接メール送信が可能。
  • その名は「Microsoft CDO Library」
  • 今回はAccessで動かしたがExcelでも実行可能。その場合セルに格納した値を引数にはめ込むこともできるみたい

 

といったところです。

 

あと、今回は試していませんが添付ファイルを選択できるように「ファイルを開く」ダイアログと組み合わせたり、テーブルにスケジュールをデータ化して保存しておいて区分を選択することでひとつのフォームのボタンから複数パターンのメールを送るとかもできそうですね。

オススメの記事

-Microsoft Office
-,