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です。
参考
まとめ
任意のカレンダーから任意の期間のスケジュールを取得する関数について解説しました。
日付(時間)を制するもの、仕事を制す、ということで、バリバリ使っていこうと思います。
コメント