Outlook macroで未読メールを全部削除する

効率化
スポンサーリンク

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

YMT4
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属性を見て削除、をすればいいような……

後で要検証。

タイトルとURLをコピーしました