ExcelVBA でOutlookの送信メールを作成する②

スポンサーリンク

OutlookをVBAで操作するコードの改良を考えてみました

前回ExcelVBAでOutlookの送信メールを作成するでOutlookのメールを作成するコードを紹介しましたが、ご質問いただいた内容があったので修正を兼ねてより詳しいVBAコードを紹介します。

VBAで操作できるOutlookのMailItemプロパティ

調べてみるとプロパティ自体はたくさんあるのですが、もともとほぼ使用しないものも多いみたいです。
その中でよく使うものを挙げてみます。

①DeferredDeliveryTime

配信する日時を指定するプロパティです。

”2017/07/02 0:00”の形式で指定するとその時間が過ぎてから送信されます。

②BCC

BCCを設定するプロパティです。
ToやCCと同じように登録されている名前かもしくはメールアドレスで指定できます。

③BodyFormat

本文テキストの形式を示します。

  • HTML形式 olFormatHTML
  • テキスト形式 olFormatPlain
  • リッチテキスト形式 olFormatRichText
  • 以上の3種類を指定できます。

    どうやら本文の内容を記載するときにHTMLBodyで指定する際は最初にこのプロパティをolFormatHTMLに指定しておく方が良さそうな気がします。

    ④Body

    外部の方にメールを送る際に、HTML形式だときちんと表示されない場合があります。
    そういった際はリッチテキスト形式やテキスト形式で送るときちんと表示されることが多いです。

    リッチテキスト形式・テキスト形式でのメールの本文はBodyで記載します。

    ⑤SendUsingAccount

    複数のアカウントを持っているときに、アカウントの切り替えを行います。
    Session.Accounts(“アカウント名”)の形式で記載します。

    スポンサーリンク

    Outlookメール送信用のVBAサンプルコード

    今回のプロパティの設定を盛り込んだメール作成のVBAサンプルコードを紹介します。

    以下のように作成したExcelのシートの内容をOutlookのメールに反映するプログラムになっています。

    Sub Outlookを起動してメール作成3()

    Dim oApp As New Outlook.Application
    Dim oItem As Outlook.MailItem
    Dim i As Integer
    Dim WSH As Variant
    Set WSH = CreateObject(“Wscript.Shell”)
    Dim DesktopPath As String
    DesktopPath = WSH.SpecialFolders(“Desktop”) ’デスクトップのパスを取得します。

    i = 2
    Do Until Cells(i, 1) = “” ’セルの1列目が空欄になるまで繰り返します
    Set oItem = oApp.CreateItem(olMailItem)

    oItem.To = Cells(i, 1) ’宛先は氏名を入れて「名前の確認」をクリックすることでアドレス一覧から選択できます。
    oItem.CC = Cells(i, 2)
    oItem.BCC = Cells(i, 3)

    oItem.Subject = Cells(i, 4)
    oItem.BodyFormat = olFormatRichText

    oItem.Body = Cells(i, 1) & “様” & vbLf & vbLf & _
    “いつもお世話になっております。” & vbLf & Cells(i, 5) & vbLf & vbLf
    ’1行目に宛先の名前を持ってきて「様」をつけます。

    If Cells(i, 6) <> “” Then ’添付ファイルが記載されているなら
    oItem.Attachments.Add DesktopPath & “” & Cells(i, 6) ’ファイルを添付します
    End If

    ’oItem.DeferredDeliveryTime = Year(Cells(i, 7)) & “/” & Month(Cells(i, 7)) & “/” & Day(Cells(i, 7)) & ” ” & _
    Hour(Cells(i, 8)) & “:” & Minute(Cells(i, 8)) & “:” & Second(Cells(i, 8))
    oItem.DeferredDeliveryTime = Year(Cells(i, 7)) & “/” & Month(Cells(i, 7)) & “/” & Day(Cells(i, 7)) & ” ” & _
    Hour(Cells(i, 8)) & “:” & Minute(Cells(i, 8))

    oItem.SendUsingAccount = Session.Accounts(Cells(i, 9).Text) ’セルの値は「.Text」にしないと型が一致しない

    oItem.Display

    i = i + 1
    Loop

    End Sub

    コメント