none
ACCESS_VBAでoutlook受信トレイのサブフォルダを操作したい RRS feed

  • 質問

  • windows10でoffice_365_soloを使用しています。
    件名の事をaccess(またはexcel)で実現したいです。
    ちなみにoffice2000では出来ています。

    またoffice_365_soloで受信トレイのメールはVBAで見る事ができます。
    送信メールを作成する事もできます。

    しかしoffice_365_soloで受信トレイのサブフォルダを見る事に成功しません。
    VBAのコードはWEBで見かけた以下のようなコードを(修正したりもして)試しましたが、
    上手くできません。

    なにか私の見落としやoutlookの仕様変更など原因のヒントをいただけないでしょうか?
    Sub GetmailFolder_b()
    Dim objOutlook As Outlook.Application
    Dim myNamespace As Outlook.NameSpace
    Dim myInbox As Variant
    Dim i As Long
    Set objOutlook = New Outlook.Application
    Set myNamespace = objOutlook.GetNamespace("MAPI")
     
    Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox)
     
    Debug.Print myInbox '受信トレイにアクセスできる
     
    For i = 1 To myInbox.Folders.Count 'Countは0件
        Debug.Print myInbox.Folders(i)    'ここでサブフォルダを取得できない
    Next i
     
    End Sub
    2019年4月30日 8:29

回答

  • 解決しました

      For Each itms1 In objNAMESPC.Folders("アカウント名").Folders("受信トレイ").Folders("フォルダ名").Items

      Next

    のようにすれば良かったんですね。

    下のページに親切な解説やサンプルがありました。

    https://i-wonder.hatenablog.jp/entry/2018/07/09/OutlookのメールをExcelに取り込む_サブフォルダ対応

    • 回答としてマーク bassi- 2019年5月8日 13:17
    2019年5月8日 13:10

すべての返信

  • 今回の問題に直接は関係ないですがオブジェクトをループで回すとき、ループカウンタを
    使わないなら For Each を使った方がいいと思います。

    Sub test()
        ' Outlook VBA での例
        Dim Fol As Folder
        Dim myInbox As Object
        Set myInbox = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
    
        For Each Fol In myInbox.Folders
            Debug.Print Fol.Name
        Next
    End Sub
    
    あと、受信トレイにサブフォルダはありますか?
    Outlook から受信トレイのプロパティ -> フォルダーサイズで確認してください。

    2019年5月3日 5:43
  • ご返信ありがとうございます。

    提示していただいたコードを
    Outlook VBAで試したところサブフォルダを表示しません。
    For Eachの前に「Debug.Print myInbox」とすれば受信トレイは表示されます。)

    Outlook から受信トレイのプロパティ -> フォルダーサイズで確認したところ、
    サブフォルダは表示されます。

    書き忘れた事に気が付きました。
    私の
    Outlookではアカウントがメールアドレス毎に複数あります。
    最初に作成し、最も使用しているアカウントしか意識していなかったのですが、
    もしかするとそれ以外のアカウントの受信トレイを参照しているのでしょうか?
    まずアカウントを指定しなければならないのでしたら、どのように指定するのでしょう?

    2019年5月7日 11:06
  • 解決しました

      For Each itms1 In objNAMESPC.Folders("アカウント名").Folders("受信トレイ").Folders("フォルダ名").Items

      Next

    のようにすれば良かったんですね。

    下のページに親切な解説やサンプルがありました。

    https://i-wonder.hatenablog.jp/entry/2018/07/09/OutlookのメールをExcelに取り込む_サブフォルダ対応

    • 回答としてマーク bassi- 2019年5月8日 13:17
    2019年5月8日 13:10