<2019/12/29誤記訂正。失礼しました>
エクセル作業をVBAで自動化した時、その結果をメール配信するところまで自動化できればいいな、と思ったことはありませんか?OLEというワザを使えば簡単にできてしまいます。今回はOLEを使ってメール配信をしてみましょう。
ここではクラスやオブジェクトの知識には深入りせずにメールを送る部分のみに絞って解説をします。クラスやオブジェクトそのものについてきちんと理解したい方はVBAのクラスを使う① クラスを使うためのオブジェクトとメソッドの前提知識 - ゆんの業務改善ブログをご覧下さい。
目次
OLEを使ってメールを配信する
OLEとは
OLEとは他のアプリケーションを動かすための規格(または技術、やり方、方法。)のことで、 Object Linking and Embeddingの略です。例えば、ExcelにはブックがあるのでExcelでブックの操作が可能です。OutlookにはメールがあるのでOutlookでメールの操作が可能です。Excelでメールを操作する為にOutlookからメールを借りてこよう、と言うのがOLEの考え方です。
より詳しい解説については、VBA OLEオートメーションで別のアプリケーションを動かす① OLEの目的と概念をご参照下さい。
OLEを使う
クラスからオブジェクトを生成して、メールを使う準備をする
まずはOutLookというアプリを操作するためのオブジェクト*1を生成します。
' これは標準モジュールに記述します Sub Email作成() Dim myOL As Object 'Outlookを操作する為のオブジェクトを宣言した Set myOL = CreateObject("Outlook.Application") 'オブジェクトを生成した End Sub
送信するメールのオブジェクトを生成する
前項ではOutlookを操作するためのオブジェクトであるmyOLを準備しました。今度は送信するメールオブジェクトをmyITEM と言う名前で用意します。メールオブジェクトとは送信するメールそのもののことです。Outlookを操作するオブジェクト、つまり機能の塊がmyOL で、送信するメールそのものをmyITEM としています。このあたりがごちゃごちゃになると理解出来なくなりますので、一つ一つ進めましょう。
先ほどのコード Set myOL = CreateObject("Outlook.Application")の下に下記を追記します。
Sub Email作成() Dim myOL As Object 'Outlookを操作する為のオブジェクトを宣言した Set myOL = CreateObject("Outlook.Application") 'オブジェクトを生成した 'ここから先が新しい部分 Dim myITEM As Object '送信するメールそのもののオブジェクトを宣言 Set myITEM = myOL.CreateItem(0) 'オブジェクトを生成した End Sub
このmyITEMがメールそのものです。ここまででメールの準備ができたので、あとは宛先と本文、添付ファイルをつければ、送信目前です。myOL もmyITEM も好きな名前をつけることができます。オブジェクトが2つ出てくるので分かりやすい様に、Outlookを操作する為のオブジェクトを格納する変数名、メールアイテムだと分かる様な変数名と変数名を分かりやすい様にしておきましょう。
宛先、本文、添付ファイルを準備する
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 Set 添付ファイル = .Attachments End With 添付ファイル.Add 添付ファイルfullpath myITEM.display myITEM.send ’送信せずにメールを送る直前で止める場合は、コメントアウトしておく
上の例では、分かりやすくするため最小限のコードに留めています。実務的には本文や題名には日付を入れたり、場合によって内容が異なるので、Functionプロシジャで作成した文字列を受け取るのが現実的です。
別シートに宛先の一覧表を作っておき、For~Next文で取得しています。A列にメールアドレス、B列に「Atten」か「CC」を入れておきます。Functionプロシジャは配列にしておき、Attenならインデックス0、CCならインデックス1に「;」区切りで格納していきます。これで、データ作成だけで無く、メール配信まで自動化できました。
なお、メールを作成するのに必要な機能を備えたクラスを作るでは宛先などを取得するクラス自体を自作します。クラスとは機能をまとめたモノ、オブジェクトはそのクラスを具現化したものですので、この関連記事のようにクラスを使うと標準モジュールをすっきりとさせることができます。
OLEを使ってメールを配信する方法まとめ
OLEをつかってメールを配信する方法は下記の通りです。
- 他のアプリを使うにはOLEという技術を使う
- クラスからオブジェクトを生成する
- オブジェクトを生成してから宛先や本文などを作成する
- クラスやオブジェクトに関する詳細な知識は一旦横に置いて、やってみる
<関連記事>
- VBA クラスモジュールの使い方を超簡単に日本語のクラス名で具体的に解説する③ メールを作成するのに必要な機能を備えたクラスを作る
- VBA HTMLでOutlookのメールの文字の色を変える方法
- VBA OLEオートメーションで別のアプリケーションを動かす① OLEの目的と概念
- VBA OLEオートメーションで別のアプリケーションを動かす② OLEで他のアプリケーションを動かすコードの作り方 Internet Explorerの例
<ゆんの電子書籍>
ゆんの電子書籍はすべてkindle unlimitedで読み放題です!
*1:クラスから生成するオブジェクトをインスタンスと言います。ここでは深入りしません