在宅勤務で、やたらめったらメールを送られます。

YMT4
Teamsも使ってるんだからそっち使えばいいのに……
とは思うけど、仕方ない……
ということで、メールのinboxフォルダがパンパンで困ったときに、クリック一発で未読メールを全部削除させます。
ユースケース
- inboxで、メールのtitle を見る
- 必要そうなメールだけ既読にする
- マクロを起動(←今回の対象)
- 未読メールが全削除される
あとに残るのは、読む必要があるメールだけ。
スッキリ。
code
' 未読メールを全部削除 Sub DeleteUnreadMail() Dim objOlFolder ' フォルダ情報 Dim objOlUnReads() ' アイテム情報 Dim objOlItem ' アイテム情報 Dim lngMsgCnt ' メッセージ数 If Err.Number = 0 Then Set objOlFolder = Application.Session.GetDefaultFolder(6) lngMsgCnt = 0 For Each objOlItem In objOlFolder.Items If objOlItem.UnRead = True Then ReDim Preserve objOlUnReads(lngMsgCnt) Set objOlUnReads(lngMsgCnt) = objOlItem lngMsgCnt = lngMsgCnt + 1 End If Next Else WScript.Echo "エラー:" & Err.Description End If For n = lngMsgCnt - 1 To 0 Step -1 objOlUnReads(n).UnRead = False objOlUnReads(n).Delete Next n End Sub
appendix
index 0 からカウントしてDeleteで削除していくと、なんか全体の配列の個数が変更になっている気がする……
(削除されるメールが、飛び飛びになってる気がする)
ので、削除は index の一番上から 0 に向けて For 文で回しました。
とりあえずサクッと作って動作したからそのままにしてるけど、もっとスマートにできそうです。
わざわざ未読メールを動的配列に突っ込んでるけど、 index の一番上から 0 にする中で、Unread属性を見て削除、をすればいいような……
後で要検証。