dポイントプレゼントキャンペーン実施中!

お世話になります。当方,VBAの初心者です。エクセルVBAからOUTLOOKを操作すべく,

あれこれやっていますが,解らないことがあるので,よろしくお願いします。

やりたいことは,意味のないことかもしれませんが,

エクセルのVBAからOUTLOOKのフォルダー(トレイ)の一覧を表示しようと思ってますが,

うまくいきません。ネットで検索しても,特定のフォルダーの下位のサブフォルダーについては,

取得方法等記載があるのですが,受信トレイと同じ階層のフォルダーの表示については,

記載がみあたりません。添付画像の赤枠の項目を取得表示したいのですが,

方法はあるのでしょうか。よろしくお願いします。

「エクセルVBAからOUTLOOKの操作を」の質問画像

A 回答 (3件)

余計なものも出てくるような。



Sub Sample()
  Dim fldr As Outlook.Folder
  Dim srch As Object
  Dim MyStore As Object

  Set MyStore = Session.DefaultStore
  For Each fldr In MyStore.GetRootFolder.Folders
    If fldr.DefaultItemType = olMailItem Then
      Debug.Print fldr.Name
    End If
  Next
  Set srch = MyStore.GetSearchFolders()
  Debug.Print "Parent : " & srch.Parent
  Debug.Print "検索 : " & srch.Parent.FolderPath
End Sub

検索フォルダーの扱いが難しいですが、何とかしてみて。
    • good
    • 1
この回答へのお礼

早速のご回答ありがとうございました。

私の環境で実行したろころ,私の望んだ結果になりました。

時々見かけたのですが,Store を使うんですね。

私は,まだ使ったことないので,これから勉強でしょうかね。

奥は深いです。

望みの結果になりましたので,ベストアンサーにさせていただきます。

ありがとうございました。

お礼日時:2020/11/01 22:22

こんばんは、


エクセルVBAからOUTLOOKを操作をする手順などの理解はあると想定して
以前、投稿したコードの一部を投稿します。
GetDefaultFolderメソッドでは、既定のフォルダしか取得できなかったかと思いますので、Namespace.Foldersで取得します。
Debug.Print でイミディエイトウィンドウに出力していますので、確認してください。

アカウント数、ループとDebug.Print 挿入位置の関係で重複出力されてしまうところは、無視してください。(すべてを出力したいので)
受信トレイと同じ階層のフォルダを書き出す場合は、If fldr = "XXX@XXXX" Then を出力したいメールアドレス(NamespaceTop folder)に変えてください。

Sub AccTopFolderCH()
Dim oAccount As Account
Dim ns As Namespace
Dim fldr As Folder, fn As Folder
Dim item As Object
Set ns = GetNamespace("MAPI")
For Each oAccount In Session.Accounts
Debug.Print vbCr & "oAccount: " & oAccount
For Each fldr In ns.Folders
Debug.Print " NamespaceTop folder: " & fldr.Name
If fldr = "XXX@XXX" Then '対象メールアドレス 又は、top folder名
For Each fn In fldr.Folders
Debug.Print " Folder.Subject: " & fn.Name
' Debug.Print " Folder.EntryID: " & fn.EntryID
' If fn.Name = "XXXXX" Then '対象フォルダ名
' For Each item In fn.Items
'Debug.Print " item .Subject: " & item.Subject
' Next
' End If
Next
End If
Next
Next
Set ns = Nothing
End Sub

特定のアカウント、ユーザー作成フォルダ、などを対象に処理する場合、
If fn.Name = "特定" Then の様に条件で処理をすれば良いかと、、
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

ご指示いただた XXX@XXX にアカウントアドレスを入れて,

やってみましたが,私のやりかたが悪いのか,

アカウントは全て表示されますが,

アカウント以下のフォルダー(トレイ)が表示されませんでした。

どのようにすればいいのでしょうか。

お礼日時:2020/11/01 12:29

GetDefaultFolderの時に下記の値を指定します。


https://docs.microsoft.com/ja-jp/office/vba/api/ …
中途半端に機械翻訳されて意味不明になっているので、英語版も合わせて見ます。
https://docs.microsoft.com/en-us/office/vba/api/ …

自分で作ったフォルダーは駄目かも。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

既定のフォルダーについては,取得できそうな気がしますが,

自分で設定したフォルダー等も表示できないか,

なやんでおります。

お礼日時:2020/11/01 12:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!