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

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属性を見て削除、をすればいいような……
後で要検証。
 
  
  
  
  
