以前こんな記事を書きました。
この記事では選択した一つのメールを処理対象にしていましたが、特定のフォルダの中のメール全てを処理対象にしたい、しかも共有の受信トレイにあるフォルダの中のメールを処理にしたい…ということが発生しました。
前提として、私の職場ではOutlookを使用していて、個人のメールアドレスと組織のメールアドレスがあります。
今回処理の対象としたいのは組織の受信トレイです。
以上の前提から、「受信トレイの中のメールを処理したい」って感じでググると、こんな感じのコードが出てきます。
dim 処理対象 as object Set 処理対象 = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
このコードだとうまくいきませんでした。
私の職場のPCの設定だと個人の受信トレイが処理の対象になってしまいました。
そこで色々と調べているうちに、以下のコードにたどり着きました。
dim 処理対象 as object Set 処理対象 = GetNamespace("MAPI").Folders("営業第1課").Folders.Item("受信トレイ")
これで、組織の受信トレイを処理対象にできました。
さらに、下記のコードでは営業第1課の「受信トレイ」のサブフォルダである「庶務担当」フォルダを処理対象にしています。
dim 処理対象 as object Set 処理対象 = GetNamespace("MAPI").Folders("営業第1課").Folders.Item("受信トレイ").Folders.Item("庶務担当")
「Folders.Item("フォルダ名")」を繰り返せば、深いサブフォルダも取得できそうです。
なお、「組織の名前がOutlookにどう登録されてるかわからない」という人は、以下のコードを使えば組織の名前がdebug.printできるはずです。
私のように「個人のアドレスと組織のアドレス」で合計で2つのアドレスを使っている場合、イミディエイトウインドウに2つ表示されると思います。
sub 確認 Dim ns As NameSpace Dim i As Long Set ns = GetNamespace("MAPI") For i = 1 To ns.Folders.Count Debug.Print ns.Folders(i).Name Next i end sub