Outlookマクロで、任意のフォルダ/期間のスケジュールを一発取得できる関数

効率化
スポンサーリンク

Outlookマクロで、

  • 任意のカレンダー
  • 任意の期間

の予定を抽出する関数を作りました。

使う側と関数をセットでご紹介します。

できるようになること

関数を叩くだけで、スケジュール一覧を取得できるようになります。

利用する側の関数

Sub displayNowMeetingLog()
    Dim myStart As Date
    Dim myEnd As Date
    Dim oItemsInDateRange As Outlook.Items
    Dim strSchedule As String
    Dim oAppt As AppointmentItem
    
    Dim calSrc As Folder
    Dim calDst As Folder
    
    ' 既定の予定表とその下の仕事という名前のフォルダーを取得
    Set calSrc = Session.GetDefaultFolder(olFolderCalendar)
    Set calDst = calSrc.Folders("取得したいカレンダーの名前")
    
    ' 取得する期間を設定する
    ' 取得したい期間の開始時間
    myStart = Now 
    ' 取得したい期間の終了時間
    myEnd = DateAdd("d", 1, myStart) 
    ' 関数呼び出し。oItemsInDateRangeの中にイベントの配列が入る
    Call GetSchedule(calDst, oItemsInDateRange, myStart, myEnd)
    
    ' 実施したい処理、それぞれoApptに対して処理を行えばOK
    For Each oAppt In oItemsInDateRange
        oAppt.Display
    Next
    
End Sub

関数本体

' 予定一覧を引っ張る
'[in] oCalendar 取得するフォルダ
'[out] oItemsInDateRange 結果を格納するItemsオブジェクト
'[in] myStart フィルタかける最初の日
'[in] myEnd フィルタをかける最後の日
'
Public Function GetSchedule(oCalendar As Outlook.Folder, oItemsInDateRange As Outlook.Items, ByRef myStart As Date, ByRef myEnd As Date)
    Dim objApItem As Outlook.AppointmentItem
    Dim oItems As Outlook.Items
    Dim oFinalItems As Outlook.Items
    Dim oAppt As Outlook.AppointmentItem
    Dim strRestriction As String
    Dim lunchTime As Boolean

    Set objApItem = Application.CreateItem(olAppointmentItem)
'        Debug.Print "Start:", myStart
'        Debug.Print "End:", myEnd
        
    strRestriction = "[Start] <= '" & Format$(myEnd, "mm/dd/yyyy hh:mm AMPM") _
    & "' AND [End] >= '" & Format(myStart, "mm/dd/yyyy hh:mm AMPM") & "'"
    
    'Debug.Print strRestriction
    
    Set oItems = oCalendar.Items
    oItems.IncludeRecurrences = True
    oItems.Sort "[Start]"
    Set oItemsInDateRange = oItems.Restrict(strRestriction)
End Function

Appendix

myEndの設定

DateAddを利用しています。

マイクロソフトのMicrosoftのドキュメントは以下の通りです。

DateAdd 関数 (Visual Basic for Applications)
Office VBA リファレンス トピック

サンプルでは、今から1日後(“d”)までの予定を取得しています。

カレンダーから取得するところがすこぶるめんどくさい割に、日付操作の関数は簡単ですよね。

デフォルトカレンダー上で、期間を細かく設定せず日単位でOKであれば、以下のような関数でもOKです。

参考

まとめ

任意のカレンダーから任意の期間のスケジュールを取得する関数について解説しました。

日付(時間)を制するもの、仕事を制す、ということで、バリバリ使っていこうと思います。

コメント

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