あなたの習慣について教えてください!!

おかげさまで,VBAの作成少しずつすすんでます。いろんなサイトで調べて見ても,

OUTLOOKのデータフォルダーの「受信」フォルダーのメールの操作については,書いてあるよう

なのですが,メールアカウント下の「受信」フォルダーの操作についての記述がないようです。

どのようなコードを記述すると,メールアカウントの「受信」フォルダーのメール等にアクセス

できるのでしょうか。


ご教示よろしくお願いいたします。

A 回答 (3件)

こんな感じで。



Dim objOL As Outlook.Application
Dim objAcct As Outlook.Account
Dim objStore As Outlook.Store
Dim fldInbox As Outlook.Folder

Set objOL = CreateObject("Outlook.Application")
' アカウントの取得
Set objAcct = objOL.Session.Accounts("bbbbb@outlook.com")
' ストアの取得
Set objStore = objAcct.DeliveryStore
' 受信トレイの取得
Set fldInbox = objStore.GetDefaultFolder(olFolderInbox)
Debug.Print fldInbox.Items.Count


こちらを参考にしました。
https://outlooklab.wordpress.com/2018/04/07/%E8% …
    • good
    • 1
この回答へのお礼

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

ご紹介いただいたサイトで,

「Application オブジェクトの Session プロパティ (NameSpace オブジェクト) の GetDefaultFolder メソッドは、既定のアカウントのストアに紐づいているフォルダーしか取得ができません。
しかし、Account オブジェクトの DeliveryStore プロパティから取得した Store オブジェクトの GetDefaultFolder メソッドを使うと、そのアカウントに紐づいている予定表フォルダーなどが取得できます。」

の表記で,納得いたしました。

ただ,ここで,また疑問が。私の環境(OUTLOOK2013 WIN10)では,GetDefaultFolder
で,操作できるのは,データファイル以下の受信トレイのようです。

ということは,データファイルが,既定のアカウント?になっているのでしょうか,この辺が解らなくなりました。


とりあえず,お礼まで。

お礼日時:2020/02/21 21:48

#1です。

#1のコードは、先のQA投稿VBAコードの抜粋なので
エラー処理などについては、その回答の全体をご覧ください。また、
行っている事は、メーラーに複数のアカウント登録している場合、そのoutlookObj.Session.Accountsを1つずつ探索して
かつ、その中にあるObject, objmailItemのフォルダを探索しています。コード自体はさらにフォルダ名を(決め打ち)変数セットしています。
GetDefaultFolderは、文字通りDefaultなので サブでセットしているアカウントに対しては、探し出す必要があったと思います。(不確かですが)

下記は、抜粋したVBAコードです。アカウント情報部分を変更して実行するとその受信トレイ内のメール数が表示すると思います。
実際には、さらにその中のメールの操作、添付ファイルを保存したり、メールを移動したり行うと思います。
For i = 1 To InboxFolder.Items.Count
Set objmailItem = InboxFolder.Items(i) ’フォルダ内のItemつまりメールを変数objmailItemにセットして、処理したりします。

メールの数を表示するサンプル

Option Explicit
Sub Outlook_integration()
Dim outlookObj As Outlook.Application
Dim myNameSpace As Object, objmailItem As Object
Dim fldr As Folder, InboxFolder As Folder, DoneFolder As Folder
Dim oAccount As Account
  Set outlookObj = CreateObject("Outlook.Application")
  Set myNameSpace = outlookObj.GetNamespace("MAPI")
  On Error GoTo ErrOutlook
  For Each oAccount In outlookObj.Session.Accounts
    For Each fldr In myNameSpace.Folders
      If fldr = "xxxxx@xxxx.xx.xx" Then  'アカウント情報 メールアドレスや名前  変更箇所(必須)
        Set InboxFolder = fldr.Folders("受信トレイ") '対象フォルダ名
  '        Set DoneFolder = fldr.Folders("xxx")
        Exit For
      End If
    Next
  Next
  MsgBox ("対象メール数 : " & InboxFolder.Items.Count)
ErrTr:
  Set outlookObj = Nothing
  Set myNameSpace = Nothing
  Set InboxFolder = Nothing
  Exit Sub
ErrOutlook:
  MsgBox "Outlook設定" & Chr(13) & "エラー" & Err.Number & Chr(13) & Err.Description
  GoTo ErrTr
ErrExcel:
  GoTo ErrTr
End Sub
    • good
    • 0

こんばんは、


>メールアカウント下の「受信」フォルダ は、デフォルト設定でないメールアカウントと言う事でしょうか?
以前このQAで書きましたコードでアドバイスします。 https://oshiete.goo.ne.jp/qa/11312920.html

参考サイト https://stackoverflow.com/questions/33953386/vba …

Dim outlookObj As Outlook.Application
Dim myNameSpace As Object, objmailItem As Object
Dim fldr As Folder, Trget1Folder As Folder, Trget2Folder As Folder
Dim oAccount As Account
Dim Attcount As Long

Set outlookObj = CreateObject("Outlook.Application")
Set myNameSpace = outlookObj.GetNamespace("MAPI")
On Error GoTo ErrOutlook
For Each oAccount In outlookObj.Session.Accounts
For Each fldr In myNameSpace.Folders
If fldr = "xxxxx@xxxxxxx.com" Then '上記内探索でアカウントが見つかれば以下を実行(対象アカウント)
Set Trget1Folder = fldr.Folders("XXX") ’変数にセットするターゲットフォルダ名(対象アカウントサブフォルダ)
Set Trget2Folder = fldr.Folders("~~~") ’変数にセットするターゲットフォルダ名2
Exit For
End If
Next
Next

詳細が不明の為、参考まで
    • good
    • 0
この回答へのお礼

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

よく分からないところもあるのですが,きちんと,エラー処理までも含んだコードなんですね。

きっと,こんな風に,くんでいけば,不要なエラーを排除できるのでしょうね。

とりあえずお礼まで。

お礼日時:2020/02/21 21:50

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報