EXCELのVBAからOutlookの会議依頼してみる

とある作業はEXCELのボタンを押せばある程度簡単に作業できるところまではやったんだけど作業自体が漏れてしまうということがあって、何とかできないかなぁと思っていました。色々とどんな手があるかと考えていたら。Outlookには予定表なるものがあるじゃないですか。なのでそれを使ってリマインダーしてみようと挑戦。OutlookのVBAがあるらしいですが、Outlookは難しそうなのと引継の時とかにEXCELシートで1年分のアラートをまとめて登録することも視野に入れていたのでEXCEL/VBAで実装してみました。
アラートだけなので会議出席依頼の返信不要オプションを指定して複数人でアラートを共有するようなことで考えています。

とりあえず意図通り動いてくれましたよ。100%コピペです。
そしてエラー実装ゼロ、まぁ落ちても被害はそこまで大きくないので、、、、
しかしシステムの仕事長いのに未だに綺麗なコード書けないし、変数の命名とかダメダメだし、テストコード書けないほぼ素人なので今年こそは何とかしたいんですけどね。


Option Explicit
Sub startmod()

    Dim tn As String
    Dim st As String
    Dim et As String
    Dim bc As String
    Dim at As Variant
    
    tn = "EXCELからOutlookに予定登録テスト"
    st = CDate("2019/4/1") & " " & CDate("11:00")
    et = CDate("2019/4/1") & " " & CDate("12:00")
    bc = "テストです" & vbCrLf & "新元号発表"
    
    at = Array("test1@sample.com", "test2@sample.com")

    Call setSchedule(tn, st, et, bc, at)
    MsgBox ("end")

End Sub

'
' Outlook会議出席依頼登録
'
Function setSchedule(titleName As String, startTime As Variant, endTime As Variant, bodyContent As String, attendee As Variant)

    Dim oApp As Outlook.Application
    Dim myNameSpace As Outlook.Namespace
    Dim myFolder  As Outlook.Folder
    Dim i As Long

    Set oApp = CreateObject("Outlook.Application")
    Set myNameSpace = oApp.GetNamespace("MAPI")

    Set myFolder = myNameSpace.GetDefaultFolder(6)
    myFolder.Display
    oApp.ActiveWindow.WindowState = 2
    Dim aITEM As Outlook.AppointmentItem
    Set aITEM = oApp.CreateItem(1)
    
    '会議依頼データのセット
    With aITEM
        .Subject = titleName
        .Body = bodyContent
        .start = startTime
        .End = endTime
        .MeetingStatus = 1
        If IsArray(attendee) = False Then
            aITEM.Close 0
            Set aITEM = Nothing
            oApp.Explorers.Item(oApp.Explorers.Count).Close
            Exit Function
        Else
            For i = LBound(attendee) To UBound(attendee)
                    .Recipients.Add attendee(i)
            Next
        End If
        .ResponseRequested = False
        .Send
    End With
 
    aITEM.Save
    aITEM.Close 0
    Set aITEM = Nothing
    oApp.Explorers.Item(oApp.Explorers.Count).Close

End Function

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)