質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

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

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

1回答

10409閲覧

Outlook VBA 受信メールの添付ファイルを新規メールへ添付したい

thachi

総合スコア14

VBA

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

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

1クリップ

投稿2018/08/20 06:31

現在Windows10(64bit)のOutlook2016で以下の処理をVBAで実装しております。
・特定のフォルダに受信されたメールの添付ファイルを、新規作成するメールへ添付して送信

下部のように書いたプログラムを実行すると
nMail.Attachments.Add vAttachments
の部分でエラーになります。
エラー内容は「ファイルが見つかりません。パスとファイル名が正しいかどうかを確認してください。」です。

Outlook上では該当の受信メールの添付ファイルは正常に開けて、保存もできます。
同じプログラムで1日前まで動いていたのですが、突然動かなくなりました。

また、新規作成メールへ添付する際に、パス指定だとエラー無く添付することが出来ます。

そのため1度ローカルへ保存しようと試みましたが、エラーになります。
エラー内容は「添付ファイルを保存できません。この操作を行うために必要なアクセス権がありません。」です。

稚拙な文となってしまい申し訳ございませんが、八方塞状態です。
お知恵を拝借できないでしょうか。
他にも必要な情報等ありましたら、ご質問ください。
よろしくお願いします。

以下実装しているプログラムの抜粋となります。

'新規メールの作成前に mITEM に受信メールを設定しておく '新規メールの作成 Dim nMail As Outlook.MailItem Set nMail = Application.CreateItem(0) '受信メールから添付ファイルを取得 Dim vAttachments As Variant vAttachments = mITEM.Attachments.Item(1) '新規メールに 件名、宛先、本文、添付ファイルをセット nMail.Subject = "件名" nMail.To = "hoge@hoge.hoge" nMail.Body = "本文です。" 'パス指定だと添付できる nMail.Attachments.Add "C:\Users\test.pdf" '1度ローカルへ保存しようとするがエラーになる 'mITEM.Attachments.Item(1).SaveAsFile "C:\Users\jushintemp.pdf" '受信メールの添付ファイルが新規作成メールに添付できない nMail.Attachments.Add vAttachments '←ここでエラー '送信 nMail.Send

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

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

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

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

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

guest

回答1

0

ベストアンサー

AttachmentオブジェクトをAttachments.Addするのは、こちらで実行してみてもエラーになりました。
申し訳ないですが、原因は分かりません。(動いていたとの事なので、OfficeのUpdateでNGになったのでしょうか・・・)

とりあえず、ローカルに保存するアイデアで問題ないと思います。
保存に失敗するのは”C:\Users”フォルダの書き込み権限がないからです。
ですので、代わりにユーザー別の一時ファイルフォルダ等を使用すればよいです。

以下、参考までに添付ファイルコピー関数を貼っておきます。

VBA

1'添付ファイルをコピー 2Sub CopyAttachments(oSourceMail, oTargetMail) 3 Set FSO = CreateObject("Scripting.FileSystemObject") 4 '一時ファイルフォルダ取得 5 Set fldTemp = FSO.GetSpecialFolder(2) 6 7 '添付ファイルコピー開始 8 For Each oItem In oSourceMail.Attachments 9 '一時ファイル保存 10 sFile = FSO.BuildPath(fldTemp.Path, oItem.FileName) 11 oItem.SaveAsFile sFile 12 '添付ファイル追加 13 oTargetMail.Attachments.Add sFile, , , oItem.DisplayName 14 '一時ファイル削除 15 FSO.DeleteFile sFile 16 Next 17 18 Set fldTemp = Nothing 19 Set FSO = Nothing 20End Sub

投稿2018/08/21 07:18

FKD

総合スコア268

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

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

thachi

2018/08/21 22:40

ご回答ありがとうございます。 そちらでもエラーが出ましたか。 やはり安定して稼動させるのは難しそうです。 保存についてもご回答、サンプルのご教示ありがとうございます。 こちらの環境で試したところ正常に保存でき、保存したファイルを添付することを確認できました。 OutlookのVBAに関してはなかなか情報が少なく難儀しておりましたが助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問