🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

5443閲覧

エクセルVBA、Outlook2013から添付ファイルの付いたメールから、添付ファイルだけを抽出する場合

kawase2

総合スコア28

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

2クリップ

投稿2019/10/12 22:14

編集2019/10/24 11:19

エクセルのマクロ(VBA)で、Outlook2013の添付ファイルの付いたメールから、添付ファイルだけを抽出する場合

アカウントが1つだけの場合は、下記のコードでできるのですが、Outlook2013に複数アカウントが設定されている場合、下記のような状態で2番目のアカウントの受信フォルダの中のテスト01フォルダから抽出したい場合、下記画像のようなエラーメッセージが出て上手く抽出できません。

Outlook2013のスクリーンショット:
Outlook2013のスクリーンショット

エラーメッセージ:
エラーメッセージ

コード:

Sub メールから添付ファイル抽出() Dim myNamespace As Namespace Dim myInbox As Object Dim mySubfolder As Object Dim strPath As String Dim strFile As String Dim i As Long Set myNamespace = GetNamespace("MAPI") Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox) Set mySubfolder = myInbox.Folders.Item("テスト01") '受信トレイのすぐ下のフォルダ strPath = "C:\Users\ET\Documents\MyDocument_BackUP\E_Excel\保存テスト01\" '添付ファイルを保存したいフォルダ For Each objItem In mySubfolder.Items With objItem For i = 1 To .Attachments.Count strFile = strPath & .Attachments.Item(i) .Attachments.Item(i).SaveAsFile strFile Next i End With Next objItem MsgBox ("無事終了") End Sub

エラーメッセージの通り、アカウントが1つの場合はフォルダを指定するだけで大丈夫だったのですが、複数となると、どのアカウントかを指定する、オブジェクトを指定する必要があると思うのですが、その方法がよくわかりません。

Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox)

たぶん、myInbox(受信トレイ)この行の前に、アカウントを指定するための、オブジェクトをSetするようなコードが入るのだと思うのですが、私が調べた限りではよくわかりませんでした。
皆さまの知恵をおかしください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

↓これ使えませんか?
複数アカウントが設定されているプロファイルのメイン以外のアカウントの予定表を取得する方法
※リンク先は予定表の取得ですが、
olFolderCalendar→olFolderInbox で採取できないでしょうか?

投稿2019/10/25 02:11

h.horikoshi

総合スコア505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

h.horikoshiさまに教えていただいたリンク先にあったコードを、オブジェクトのセット方法などを、少し置き換えて試したところ、手元のPCでは上手く動きました。
あとは会社のPCで動けば完全解決です。ありがとうございました。

Sub SaveAttachmentFiles() Dim myNamespace As Namespace Dim myInbox As Object Dim mySubfolder As Object Dim strPath As String Dim strFile As String Dim i As Long Set myNamespace = GetNamespace("MAPI") '---教えてもらったコードを追加した部分--- Dim objAcct As Account Dim objStore As Store Dim fldICalendar As Folder ' アカウントの取得 --- 先頭にGetNamespace("MAPI")で取得したオブジェクトをセット Set objAcct = myNamespace.Application.Session.Accounts("ooo@yahoo.co.jp") ' ストアの取得 Set objStore = objAcct.DeliveryStore ' 予定表の取得 --- olFolderCalendarを、olFolderInboxに置き換え Set myInbox = objStore.GetDefaultFolder(olFolderInbox) '---教えてもらったコードを追加した部分ここまで Set mySubfolder = myInbox.Folders.Item("テスト01") '受信トレイ内のフォルダ strPath = Range("A8").Value '添付ファイルを保存したいフォルダ For Each objItem In mySubfolder.Items With objItem For i = 1 To .Attachments.Count strFile = strPath & .Attachments.Item(i) .Attachments.Item(i).SaveAsFile strFile Next i End With Next objItem MsgBox ("無事終了") End Sub

投稿2019/10/25 12:55

kawase2

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ちゃんと調べていませんが、おそらく、アカウントは明示指定できなくて、現在アクティブなアカウントを見に行くのだと思います。

投稿2019/10/13 12:30

otn

総合スコア85882

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kawase2

2019/10/24 11:08

>現在アクティブなアカウント というのが、よくわかりません。 送受信した直後のアカウントということでしょうか? またはメールやフォルダが選択されている状態でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問