エクセルVBAで使用するコードの備忘録。VBAで作成したOutlookメール本文にExcelスプレッドシートの表を貼り付けるコード。Outlookメールを送付するための基本的なコードについてはこちらをご覧ください。
参照設定
VBAでOutlookを操作するための参照設定は次のように行います。VBAのコードエディタから「ツール > 参照設定」と進み、「Microsoft Outlook XX.X Object Library」にチェックを入れればOKです(XX.X部分の数字はバージョンによって変わります)。参照設定を行わなくとも操作を行うことは可能ですが、できる限り参照設定を行うことをお勧めします(参照設定の有無による違いについてはこちらをご参照ください)。
MailItemオブジェクト
OutlookをVBAから利用するための「Outlook.Application」オブジェクトを使用します。Outlookメールを表現する「Outlook.MailItem」オブジェクトはこの「Outlook.Application」オブジェクトに対してCreateItemメソッドを使用してやれば生成できます。
Outlookメールにエクセルの表を貼り付けるにはMailItemオブジェクトのWordDocumentオブジェクトを利用します。イメージはOutlookのメール本文の表現がWordDocumentのようにMailItemオブジェクトに保存されていて、そのWordDocumentにエクセルの表を貼り付けてメール本文にも反映させるイメージです。
WordDocumentオブジェクトはMailItemオブジェクトに含まれるInspectorオブジェクト下にあります。InspectorオブジェクトというのはOutlookアイテムが表示されるウィンドウを表しています。このInspectorオブジェクトを取得するにはGetInspectorメソッドを使用します。
いろいろと書いてきましたがわかりにくいと思うのでとりあえず以下のサンプルコードを見てみてください。
サンプルコード
下記のサンプルコードではVBAからOutlookのメールを表示して、本文にExcelワークシートの指定範囲を表として貼付し、メールを送付するようにしてあります。参照設定ありの場合となしの場合のコードも一つにまとめて表記してありますので、ご自身の設定に応じてコメントアウトを設定しなおすなどして使用してください。
なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。
Public Sub CreateMailWithTable()
'--- 参照設定ありの場合 ---'
Dim objOutlook As Outlook.Application
Set objOutlook = New Outlook.Application
Dim objMail As Outlook.MailItem
Set objMail = objOutlook.CreateItem(olMailItem)
'--- 参照設定なしの場合 ---'
' Dim objOutlook As Object
' Set objOutlook = CreateObject("Outlook.Application")
' Dim objMail As Object
' Set objMail = objOutlook.CreateItem(0)
'--- メールの内容を格納する変数 ---'
Dim toStr As String
Dim ccStr As String
Dim bccStr As String
Dim subjectStr As String
Dim bodyStr As String
'--- 宛先の内容 ---'
toStr = "[宛先のメールアドレス]"
ccStr = "[CCのメールアドレス]"
bccStr = "[BCCのメールアドレス]"
'--- 件名の内容 ---'
subjectStr = "[件名]"
'--- 本文の内容 ---'
bodyStr = "[本文]"
'--- 条件を設定 ---'
objMail.To = toStr
objMail.CC = ccStr
objMail.BCC = bccStr
objMail.Subject = subjectStr
objMail.Body = bodyStr
'--- メールを表示 ---'
objMail.Display
'--- Excelワークシート ---'
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("[ワークシート名]")
'--- 貼り付ける表の範囲(A1:H10のような文字列) ---'
Dim tableAddress As String
tableAddress = "[表のアドレス]"
'--- メール本文に表を貼り付け ---'
Call ws.Range(tableAddress).Copy
objMail.GetInspector().WordEditor.Windows(1).Selection.Paste
'--- メールを送付 ---'
objMail.Send
End Sub