ゆんの業務改善ブログ

①生産性向上 ②業務改善 ③自動化 について情報発信しています。VBAプログラムは本当初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。

VBA OLEを使ってメールを配信する

<2019/12/29誤記訂正。失礼しました>

エクセル作業を自動化した時、その結果をメール配信するところまで自動化できればいいな、と思ったことはありませんか?OLEというワザを使えば簡単にできてしまいます。今回は、OLEを使ってメール配信をしてみましょう。

*ここではクラスやオブジェクトの知識には深入りせずにメールを送る部分のみ簡潔に解説します。クラスやオブジェクトについて詳しく知りたい方はVBAのクラスを使う① クラスを使うためのオブジェクトとメソッドの前提知識 - ゆんの業務改善ブログをご覧下さい。

目次

OLEを使ってメールを配信する

OLEとは

OLEとは他のアプリケーションを動かすための規格(または技術、やり方、方法。)のことで、 Object Linking and Embeddingの略です。例えば、ExcelにはブックがあるのでExcelでブックの操作が可能です。OutlookにはメールがあるのでOutlookでメールの操作が可能です。Excelでメールを操作する為にOutlookからメールを借りてこよう、と言うのがOLEの考え方です。

より詳しい解説については、VBA OLEオートメーションで別のアプリケーションを動かす① OLEの目的と概念をご参照下さい。

OLEを使う

クラスからオブジェクトを生成して、メールを使う準備をする

まずはOutLookというアプリを操作するためのオブジェクトを生成します。インスタンスとも言います。クラスやオブジェクトについての前提知識についてはVBAのクラスを使う① クラスを使うためのオブジェクトとメソッドの前提知識 - ゆんの業務改善ブログをご覧下さい。

Sub Email作成()
    Dim myOL As Object
    Set myOL = CreateObject("Outlook.Application")
End Sub
宛先、本文、添付ファイルを準備する

先ほどは、Outlookを操作するためのオブジェクトであるmyOLを準備しました。今度は送信するメールオブジェクトを用意します。

先ほどのコード Set myOL = CreateObject("Outlook.Application")の下に下記を追記します。

    Dim myITEM As Object
    Set myITEM = myOL.CreateItem(0)

これがメールそのものです。ここまででメールの準備ができたので、あとは宛先と本文、添付ファイルをつければ、送信目前です。

    Dim 配信先str As String
    Dim CCstr As String
    Dim 題名str As String
    Dim 本文str As String
    Dim 添付ファイルfullpath As String
    Dim 添付ファイル As Object

    配信先str = 'ココに配信先を入れる 複数宛先の場合は「;」で区切る
    CCstr = 'ココにCCに入れる宛先を入れる 複数宛先の場合は「;」で区切る
    題名str = 'ココに題名を入れる
    本文str = 'ココに本文を入れる  
    添付ファイルfullpath = ’ココにフルパスを入れる    

    With myItem
        .To = 配信先str
        .CC = CCstr
        .Subject = 題名str
        .Body = 本文str
    End With
   
    Set 添付ファイル1 = .Attachments
    添付ファイル1.Add 添付ファイル1fullpath

    myITEM.display
    myITEM.send ’送信せずにメールを送る直前で止める場合は、コメントアウトしておく

上の例では、極力単純に、分かりやすくするため最小限にしています。実務的には本文や題名には日付を入れたり、場合によって内容が異なるので、Functionプロシジャで作成した文字列を受け取るのが現実的です。

私が実務で使うプログラムでは、To、CCに入れる宛先もFunctionで作成しています。

別シートに宛先の一覧表を作っておき、For~Next文で取得しています。A列にメールアドレス、B列に「Atten」か「CC」を入れておきます。Functionプロシジャは配列にしておき、Attenならインデックス0、CCならインデックス1に「;」区切りで格納していきます。

これで、データ作成だけで無く、メール配信まで自動化できました。

OLEを使ってメールを配信する方法まとめ

OLEをつかってメールを配信する方法は下記の通りです。

  • 他のアプリを使うにはOLEという技術を使う
  • クラスからオブジェクトを生成する
  • オブジェクトを生成してから宛先や本文などを作成する
  • クラスやオブジェクトに関する詳細な知識は一旦横に置いて、やってみる

<関連記事>