情シス担当の備忘録

VBA・労働法とか。

【OutlookVBA】共有の受信トレイを処理対象にする

以前こんな記事を書きました。

cha-hanman.hatenablog.com

この記事では選択した一つのメールを処理対象にしていましたが、特定のフォルダの中のメール全てを処理対象にしたい、しかも共有の受信トレイにあるフォルダの中のメールを処理にしたい…ということが発生しました。

前提として、私の職場では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