037 日報メール作成

こんにちは、くのへ@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に下書きメールを作らせるだけで全然スピードが違います。


ではまた別の記事で~
🦅バサバサ~

くのへスタジオはこちら。
Outlook-VBAコーナーはこちら。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です