概要
メールの振り分け設定をしている環境で各ディレクトリごとに開封済みにするのが面倒でした
ということで、存在する全ディレクトリ (受信トレイを含む) 配下にあるメールを配信済みにするマクロを作成しました
今回のマクロでは 2 階層分まで対応しています
階層的には以下のようなディレクトリ構成を想定しています
これの受信トレイ配下のメールと ssubN 配下のメールを全部 UnRead にします
受信トレイ
├── sub1
│ ├── ssub1
│ ├── ssub2
│ └── ssub3
└── sub2
├── ssub1
└── ssub2
環境
- Windows7 64bit
- Outlook 2013
マクロ
Sub allUnRead()
Set myNamespace = Application.GetNamespace("MAPI")
Set inbox = myNamespace.GetDefaultFolder(olFolderInbox)
' 受信トレイ配下のメールを UnRead する
For Each mail In inbox.Items
If (mail.Class = olMail) And (mail.UnRead) Then
mail.UnRead = False
End If
Next
Dim sum As Integer
' 受信トレイ直下のサブディレクトリ
For i = 1 To inbox.Folders.Count
Set subFolder = inbox.Folders.Item(i)
' サブディレクトリ直下のサブサブディレクトリ
For j = 1 To subFolder.Folders.Count
sum = sum + 1
Set ssubFolder = subFolder.Folders.Item(j)
' それを UnRead する
For Each mail In ssubFolder.Items
If (mail.Class = olMail) And (mail.UnRead) Then
mail.UnRead = False
End If
Next
Next
Next
MsgBox sum
End Sub
簡単な説明
まずメールにアクセスするための準備をします
Set myNamespace = Application.GetNamespace("MAPI")
そして受信トレイのオブジェクトを取得します
olFolderInbox を指定することで受信トレイのオブジェクトが取得できます
ここで指定する値を変更すると連絡先や予定の情報も取得することができます
参考: https://msdn.microsoft.com/ja-jp/library/office/ff861868.aspx
Set inbox = myNamespace.GetDefaultFolder(olFolderInbox)
まずは受信トレイ直下にあるメールを全部 UnRead にします
For Each mail In inbox.Items
If (mail.Class = olMail) And (mail.UnRead) Then
mail.UnRead = False
End If
Next
If 文の条件がないとすでに UnRead になっているメールに対しても再度 UnRead のフラグを立てようとしてしまいます
問題はないのですが、大量のメールがあるときに非常に重くなるので入れたほうが良いです
次に受信トレイ直下にあるサブディレクトリを取得します
For i = 1 To inbox.Folders.Count
Set subFolder = inbox.Folders.Item(i)
そしてその後すぐにサブディレクトリ直下にあるサブサブディレクトリを取得します
For j = 1 To subFolder.Folders.Count
Set ssubFolder = subFolder.Folders.Item(j)
あとはサブサブディレクトリ直下にあるメールをすべて UnRead にします
For Each mail In ssubFolder.Items
If (mail.Class = olMail) And (mail.UnRead) Then
mail.UnRead = False
End If
Next
一応最後に終了したことを把握するためメッセージを表示します
MsgBox sum
これは取得したサブサブディレクトリの数を表示しています
マクロの登録
この記事の手順通りに実施しました
- 開発 -> マクロ -> マクロ
- 名前入力 (allUnRead) -> 作成
- 今回のスクリプトをコピペ
- 実行
でマクロを実行できます
再度実行したい場合は
開発 -> マクロ -> allUnRead
を選択すれば OK です
最後に
Outlook 2013 で階層化されているメールを全部 UnRead するマクロを作成しました
今回は Outlook のイベントを使っていないので普通のマクロとして作成しています
ThisOutlookSession 側のマクロではないのでそっちにコピペしないようにしてください
0 件のコメント:
コメントを投稿