こんにちは、くのへ@MasazaneKunoheです。
日報メール作成のコードを投稿します。
コロナ禍で在宅ワークが普及した結果、日報メールを打つという作業が追加になった方も多いのではないでしょうか?
毎日の作業になると割とめんどくさいですよね。
そこで、「タスク」を活用した日報作成コードを作りました。
日報メール作成
このコードは、今日完了したタスクを抽出して作業報告メールを作るプログラムです。
次のコードをOutlook VBEの標準モジュールにコピペで動くと思います。
Sub DailyReport()
'objTaskItemsにタスクアイテム一式をセット
Dim objMAPI As Object
Set objMAPI = GetNamespace("MAPI")
Dim objTaskItems As Object
Set objTaskItems = objMAPI.GetDefaultFolder(olFolderTasks).Items
'タスクアイテム一式から「今日完了した」タスクを抽出し、strTodayTaskに書き込む
'「今日完了した」はDateCompletedプロパティが今日の日付となっているかどうかで判定する
Dim objTask As Object
Dim strTodayTask As String
For Each objTask In objTaskItems
If objTask.DateCompleted = Date Then
strTodayTask = strTodayTask & objTask.Subject & vbCrLf
End If
Next objTask
'メールを作成する
Dim objMailItem As Object
Set objMailItem = CreateItem(olMailItem)
Dim strSignature As String
With objMailItem
.Display
strSignature = .Body
.To = "Tosample@sample.com" '正宛先
.CC = "CCsample@sample.com" 'CC宛先
.Subject = "【日報】本日の業務報告" '件名
'本文
.Body = "■■さん" & vbCrLf & vbCrLf & _
"本日の業務を終了します。以下作業を完了いたしました。" & vbCrLf & vbCrLf & _
"<本日の作業>" & vbCrLf & _
strTodayTask & vbCrLf & _
strSignature
.Display '作成メールを表示する。下書き保存や送信BOXに送る場合は↓こちら
End With
End Sub
動作の様子
次の条件・タスクの状況でこのコードを実行します。
〇条件:本日は2021年8月15日である
・15日のタスク(未完)⇒15日(本日)に期限を迎えるが未完のタスク
・14日のタスク(15日完了)⇒14日(昨日)に期限であったが15日(本日)完了したタスク
・15日のタスク(完了)⇒ 15日(本日)に期限で、本日完了したタスク
・16日のタスク(15日完了)⇒16日(明日)の期限であるが15日(本日)完了したタスク
・16日のタスク(未完)⇒16日(明日)期限でまだ完了していないタスク
(画像で示すと次の画像の状況です)
実行すると次のメールが作成されます。
コードのTo・CC宛先や■■の部分を自分用にカスタマイズすると、日報メールの下書きを自動作成してくれるマクロの出来上がりです。
解説
このコードは次のようなプログラムになっています。
1.objTaskItemsにタスクアイテム一式をセット
2.タスクアイテム一式から「今日完了した」タスクを抽出し、strTodayTaskに書き込む
3.メールを作成する
これらのポイントを解説します。
1.objTaskItems にタスクアイテム一式をセット
次のコードでobjTaskItemsにタスクアイテムを一式セットしています。
'objTaskItemsにタスクアイテム一式をセット
Dim objMAPI As Object
Set objMAPI = GetNamespace("MAPI")
Dim objTaskItems As Object
Set objTaskItems = objMAPI.GetDefaultFolder(olFolderTasks).Items
このコードの詳細は、こちらをご参照ください。
2. タスクアイテム一式から「今日」「完了した」タスクを抽出し、strTodayTaskに書き込む
次のコードですべてのタスクアイテム一式である「objTaskItems」オブジェクトから、一つずつタスクアイテムを抽出し、「今日完了したタスク」であるかを判定しています。
今日完了したタスクであれば、strTodayTaskに件名を加筆しています。
なお、「今日完了した」は、タスクを完了登録した日付が書き込まれるDateCompletedプロパティを使い、Date(今日)と一致するかどうかで判定させています。
'タスクアイテム一式から「今日完了した」タスクを抽出し、strTodayTaskに書き込む
'「今日完了した」はDateCompletedプロパティが今日の日付となっているかどうかで判定する
Dim objTask As Object
Dim strTodayTask As String
For Each objTask In objTaskItems
If objTask.DateCompleted = Date Then
strTodayTask = strTodayTask & objTask.Subject & vbCrLf
End If
Next objTask
3. メールを作成する
次のコードでメールを作成しています。
'メールを作成する
Dim objMailItem As Object
Set objMailItem = CreateItem(olMailItem)
Dim strSignature As String
With objMailItem
.Display
strSignature = .Body
.To = "Tosample@sample.com" '正宛先
.CC = "CCsample@sample.com" 'CC宛先
.Subject = "【日報】本日の業務報告" '件名
'本文
.Body = "■■さん" & vbCrLf & vbCrLf & _
"本日の業務を終了します。以下作業を完了いたしました。" & vbCrLf & vbCrLf & _
"<本日の作業>" & vbCrLf & _
strTodayTask & vbCrLf & _
strSignature
.Display '作成メールを表示する。下書き保存や送信BOXに送る場合は↓こちら
End With
特にここは解説不要と思いますが、一度Displayで一度表示させてからstrSignatureにBodyプロパティを代入しているところが気になる方もおられるかもしれません。
その方は、こちらをご参照ください。
この作業で署名を保管しています。
以上。
出来上がったメールはタスク件名を報告用に手直しする必要などはありますが、それでもOutlook VBAに下書きメールを作らせるだけで全然スピードが違います。
ではまた別の記事で~
🦅バサバサ~