在宅勤務で、やたらめったらメールを送られます。
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属性を見て削除、をすればいいような……
後で要検証。