メール

excelで仕事のタスク管理を試してみてるのだが
報告用メールをvbaでさらっと作成できないかなぁ
と思って調べながら作ってみた。
メールを送信するのではなく、新規作成段階で止めたかったので以下のようになりますた。

Option Explicit

Public Sub CreateMail_Click()
    Dim mapiSession As Object
    Dim mapiMessages As Object
    ActiveWorkbook.Save
    Set mapiSession = CreateObject("MSMAPI.MAPISession")
    Set mapiMessages = CreateObject("MSMAPI.MAPIMessages")
    mapiSession.SignOn
    With mapiMessages
        .SessionID = mapiSession.SessionID
        .Compose
        ' .AttachmentPathName = ActiveWorkbook.FullName

        .MsgSubject = getSubject
        .MsgNoteText = getBody

        Dim toAddress As Variant
        Dim i As Integer
        toAddress = getAddress
        For i = 0 To UBound(toAddress)
                .RecipIndex = i
                .RecipType = 1
                .RecipAddress = toAddress(i)
                .ResolveName
        Next i
        
        ' .Send (False)
        .Send (True)
    End With
    mapiSession.SignOff
End Sub

Private Function getAddress() As Variant
    Dim add As String
    add = "foo@com, bar@com" 
    getAddress = Split(add, ",")
End Function


デフォルトのメールアプリをいつも使ってるbeckyに変更。
あとは、[MSMAPI.MAPISession]、[MSMAPI.MAPIMessages]で実装可。
宛先が複数となる場合は
[RecipIndex]で配列化すると、うまくいく。