スポンサーリンク

Excel VBAでOutlookメールを送る3

Outlook

前回はExcelからOutlookに必要な情報を取得する方法を勉強しました。今回はOutlookでのメールの作成方法を勉強します。

コードは複雑ですがOutlookでメールを作成するひな形として使えますので覚えなくても問題ないです。私も覚えてないのでこういうものとして使っていきましょう。

スポンサーリンク

■前回までのコード

前回ではExcelを立ち上げて値を取得するところまで行いました。昔の記事はこちら。

Sub 報告メール()

'Excelファイルを開く
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Users\Public\報告メール.xlsx")

'変数を定義する
Dim toStr As String 'To
Dim ccStr As String 'Cc
Dim bccStr As String 'bcc
Dim subjectStr As String '件名
Dim bodyStr As String '本文
Dim attach As String '添付ファイル

'Excelワークシートから値を読み取る
toStr = wb.Worksheets("Sheet1").Range("B2").Value
ccStr = wb.Worksheets("Sheet1").Range("B3").Value
bccStr = wb.Worksheets("Sheet1").Range("B4").Value
subjectStr = wb.Worksheets("Sheet1").Range("B5").Value
bodyStr = wb.Worksheets("Sheet1").Range("B6").Value
attach = wb.Worksheets("Sheet1").Range("B7").Value

■今回の流れ

3 Outlookを起動する

4 Outlookの新規メールを作成し、2で取得した変数をTo: Cc:~に当てはめ送信する

■コード

'Outlookを起動してインスタンスを作成する  参照設定なし
Dim objOutlook As Object
Set objOutlook = CreateObject("Outlook.Application")

'新規メールのオブジェクトを取得する'
Dim objMail As Object
Set objMail = objOutlook.CreateItem(0)
                
'オブジェクトの各プロパティにExcelワークシートから読み取った値を代入する
objMail.To = toStr
objMail.CC = ccStr
objMail.BCC = bccStr
objMail.Subject = subjectStr
objMail.Body = bodyStr
objMail.attachments.Add (attach)


'メールを表示させる
objMail.Display

'Outlookのオブジェクトの開放
Set objMail = Nothing
Set objOutlook = Nothing
  
End Sub

■コードの説明

'Outlookを起動してインスタンスを作成する
Dim objOutlook As Object
Set objOutlook = CreateObject("Outlook.Application")

ここではCreateObject(Application)でOutlookのインスタンスを作成しています。インスタンスとは「実体化」という意味です。

現在ソフトとしてはExcelしか立ちあがっていません。Excel内で操作する際はインスタンス化は不要(というかすでに立ち上がってる)のですが他のプログラムを動かす際には一度立ち上げないといけません。それを実体化というのです。

なお2行目で実際にOutlookを立ち上げていますがここでは参照設定をしていません。

参照設定とは他のプログラムを動かす補助機能のことです。例としてはWordやPowerpointなどのOffice系ソフトやファイルを操作するWindowsのファイル操作の機能などがあります。

ただVBAをしない限りはでは使わない機能なので普段はOFFになっています。

参照設定はしたほうがコードを書く上では便利なのですが個人的には1 他のPCでは使えない(設定しないといけない) 2 Windowsのアップデートでおかしくなることがあることから使っていません。

複数のPCを持っていたり他の人にあげたりする場合はしない方が便利かと思います。

'新規メールのオブジェクトを取得する'
Dim objMail As Object
Set objMail = objOutlook.CreateItem(0)

CreateItem(0)は新規メールを表すオブジェクトです。このオブジェクトを取得してobjMailという変数名としています。以降で頻繁にこのオブジェクトを指定する必要がある為です。

'オブジェクトの各プロパティにExcelワークシートから読み取った値を代入する
objMail.To = toStr
objMail.CC = ccStr
objMail.BCC = bccStr
objMail.Subject = subjectStr
objMail.Body = bodyStr
objMail.attachments.Add (attach)

.ToはメールオブジェクトのTo プロパティを表しています。プロパティについては別で説明しますが単純にはその状態を表すと思ってもらって結構です。

このプロパティにエクセルで取得したそれぞれの変数を代入していっています。

メールのそれぞれの箇所に先ほどエクセルで取得した値を入力していっているイメージです。

これで入力は終わりましたが以下が残っています。

'メールを表示させる
objMail.Display

'Outlookのオブジェクトの開放
Set objMail = Nothing
Set objOutlook = Nothing

End Sub

Displayで表示させるようにしています。これをしないとメールが表示されないのでご注意ください。

最後にOutlookのオブジェクトを開放します。これは最初は意識しなくてもよいですがしておかないとOutlookの情報が残り続けてメモリを圧迫するものと思っておいてください。

■ここでのポイント

コードをまとめると以下となります。これでExcel VBAからメールを作成できるようになりました。

次回は少し応用編をやりますのでお待ちください

Sub 報告メール()

'Excelファイルを開く
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Users\Public\報告メール.xlsx")

'変数を定義する
Dim toStr As String 'To
Dim ccStr As String 'Cc
Dim bccStr As String 'bcc
Dim subjectStr As String '件名
Dim bodyStr As String '本文
Dim attach As String '添付ファイル

'Excelワークシートから値を読み取る
toStr = wb.Worksheets("Sheet1").Range("B2").Value
ccStr = wb.Worksheets("Sheet1").Range("B3").Value
bccStr = wb.Worksheets("Sheet1").Range("B4").Value
subjectStr = wb.Worksheets("Sheet1").Range("B5").Value
bodyStr = wb.Worksheets("Sheet1").Range("B6").Value
attach = wb.Worksheets("Sheet1").Range("B7").Value

'Outlookを起動してインスタンスを作成する 参照設定なし
Dim objOutlook As Object
Set objOutlook = CreateObject("Outlook.Application")

'新規メールのオブジェクトを取得する'
Dim objMail As Object
Set objMail = objOutlook.CreateItem(0)
                
'オブジェクトの各プロパティにExcelワークシートから読み取った値を代入する
objMail.To = toStr
objMail.CC = ccStr
objMail.BCC = bccStr
objMail.Subject = subjectStr
objMail.Body = bodyStr
objMail.attachments.Add (attach)


'メールを表示させる
objMail.Display

'Outlookのオブジェクトの開放
Set objMail = Nothing
Set objOutlook = Nothing
  
End Sub

コメント

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