サーバーの定期更新契約を忘れて、うっかり403エラーを出してしまいました。
申し訳ありません…
さて今回は、OfficeのOutlookに、VBAで自作マクロを組み込んで、自動で日報を作ってくれるようにしてみたお話です。
会社や部活動でよくある「日報」。これ、本当に面倒くさいですよね…
いつも同じフォーマットなのにいちいち手で書かなきゃいけないなんて。
ならば
自動化しましょう! ってことでVBAでマクロ組んでみました。
目次
Step1.Outlookのメールテンプレートを作成する
まず、Outlookでメールテンプレートを作ります。
そのテンプレートを呼び出して、必要情報を書き換えていくイメージです。
新しい電子メール から本文を書きます。
ただし、日付など変化する場所については、それだと分かる語句にすると良いです。
見たほうが速いですね。
宛先:空欄でOK
件名:【日報】 today
本文: 〇〇さん お疲れ様です、××です。
todayの日報を送付致します。
------------------------------------------------
【today(t_week)】 ※本日のスケジュール
< Today_task_List >
< Today_task_review >
------------------------------------------------
以上、よろしくお願い致します。
この中に記載された、today、t_week、Today_task_List、Today_task_reviewを書き換えて日報にします。
Step2. 置き換える
Sub SendDailyReport()Dim MyItem As Outlook.MailItem
Dim DirName As String
Dim WeekDayList(7) As StringWeekDayList(0) = "日"
WeekDayList(1) = "月"
WeekDayList(2) = "火"
WeekDayList(3) = "水"
WeekDayList(4) = "木"
WeekDayList(5) = "金"
WeekDayList(6) = "土"
'// ************************************************************
'// Write Folder Address!!
'// ************************************************************
DirName = "ここに日報の内容を書いたフォルダのパスを記入"
Set MyItem = Application.CreateItemFromTemplate(DirName & "report.oft")
' Send Address
MyItem.To = "送信先(to)"
MyItem.CC = "CC送信先(CC)"
' BCC Send Address
MyItem.BCC = "BCC送信先(BCC)"
MyItem.Display
dtshort = FormatDateTime(Now, vbShortDate)
MyItem.Subject = Replace(MyItem.Subject, "today", dtshort)
MyItem.Body = Replace(MyItem.Body, "today", dtshort)
MyItem.Body = Replace(MyItem.Body, "t_week", WeekDayList(Weekday(dtshort) - 1))
' Get today task lists
today_date = Replace(dtshort, "/", "")
Dim buf As String
With CreateObject("Scripting.FileSystemObject")
With .GetFile(DirName & today_date & "_task.txt").OpenAsTextStream
buf = .ReadAll
.Close
End With
End With
MyItem.Body = Replace(MyItem.Body, "", buf)
' Get today task reviews
With CreateObject("Scripting.FileSystemObject")
With .GetFile(DirName & today_date & "_review.txt").OpenAsTextStream
buf = .ReadAll
.Close
End With
End With
MyItem.Body = Replace(MyItem.Body, "", buf)
End Sub
MyItem.Subject = Replace(MyItem.Subject, "today", dtshort)
これで、文字をReplace(置換)しております。
dtshortには今日の日付が入っているため、today を今日の日付と置換します。
With CreateObject("Scripting.FileSystemObject")
With .GetFile(DirName & today_date & "_task.txt").OpenAsTextStream
buf = .ReadAll
.Close
End With
End With
MyItem.Body = Replace(MyItem.Body, "", buf)
これは、外部のテキストファイルを開いて、内容をそのままコピーします。
テキストファイルの中身すべてを buf に保存しているため、
あとは Today_task_List と buf を入れ替えることにより、テキストファイルの内容がそのままメール本文に記載されます。
これを利用することで、日報がここまで簡単になります。
1.今日の日付_task.txt と 今日の日付_review.txt を用意する
2. Outlookを開く
3. VBAマクロを実行する
あら簡単☆