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

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

新規登録して質問してみよう
ただいま回答率
85.35%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

VBA

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

Outlook

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

メール

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

Q&A

解決済

2回答

8956閲覧

Outlook VBA 受信メールの添付ファイルを開く

Crucian_carp

総合スコア11

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

VBA

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

Outlook

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

メール

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

0グッド

0クリップ

投稿2020/04/18 06:34

編集2020/04/18 07:48

Outlookで受信したメールに添付されているファイル(.xlsx)を開くマクロが組みたいです。

VBA

1Sub SaveAsFile() 2 3 'ファイルを保存したいフォルダ 4 Dim destFolderPath As String 5 destFolderPath = "C:\Users\Atsuki\Desktop\新しいフォルダー (2)\" 6 7 '今閲覧中のオブジェクトを取得(メールなど) 8 Dim objItem As Object 9 Set objItem = Application.ActiveInspector.CurrentItem 10 11 '保存するファイルのフルパス 12 Dim fullFileName As String 13 14 'For Each の場合 15 Dim at As Outlook.attachment 16 17 For Each at In objItem.Attachments 18 Debug.Print at.FileName 19 20 21 If at.FileName Like "DRF####.xlsx" Then 22 23 24 End If 25 Next at

”If at.FileName Like "DRF####.xlsx" Then”のあとにどのような記載を加えればよいのでしょうか。

【保存してから編集するという流れで組めない背景】
保存先のフォルダには"DRF####.xlsx"に当てはまるファイルがいくつも入っている状態で、それらのExcelはすでにオートフィル付きの状態で保存されています。
保存してから開くとなると、いくつもある"DRF####.xlsx"のファイルの中から今回保存したフォルダを探し出すコードを組む必要があるということになり、コードが複雑になりそうでしたので、できれば保存前にオートフィルの処理を行いたいと考えておりました。
お手数おかけしますが、どなたかお知恵をお貸しいただけますと幸いです。

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

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

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

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

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

m.ts10806

2020/04/18 06:39 編集

今、どこまでできているんでしょう。 現在の「問題・課題」を明記してください。
Crucian_carp

2020/04/18 06:45

m.ts10806さま コメントありがとうございます。 現在の問題は、「添付ファイルをフォルダに保存せずに開く」というコードの書き方が分からない。 という状況になります。
m.ts10806

2020/04/18 06:47

問題は分かりました。 ただ、今、どこまでできているんでしょう。 ↑というほうが大事で、要は「今のコードでやりたいことがどこまで実現できているか」という確認をしたいのです。
Crucian_carp

2020/04/18 07:05

お返事ありがとうございます。 ちょっと長くなってしまい申し訳ないのですが、現状を述べさせていただきます。 私が作りたいマクロの全体像は、. (0)受信したメールの添付Excelファイルのうち、"DRF####.xlsx"というファイル名のエクセルに対して (1)1行目にオートフィルを付ける (2)所定のフォルダに保存する というマクロになります。 (0),(2)については上記コードにて達成できているのですが、(1)についてはまだ何もできておりません。 (1)について自分なりに分かっていることを申し上げますと、エクセルファイルを開くのだからOpenメソッドを使いたいが、まだ当該ファイルはフォルダに保存しているわけではございませんので、パスなどの指定ができないということです。 そこで、他に(1)を行う方法がないのか、あるいは私の認識がそもそもどこか間違っているのか、教えていただければと思っております。 長くなってしまいましたが、今回の質問に書かせていただいておりますこと(受信メールの添付ファイルを開く)については、上記コードでは全く実現できていないというのが現状になるかと思います。 このような状況で質問を投げてしまうのは非常に情けないのですが、可能でしたら教えていただけますと幸いです。 よろしくお願いいたします。
imihito

2020/04/18 07:16

なぜ「フォルダに保存する前に開く」必要があるのですか? 保存してから開いて上書き保存しても結果は変わらないと思いますが…。 参考として、Outlookでxlsxなどの添付ファイルを開く際も、Outlook側で一時的にファイルが保存されているはずです(=ファイルとして保存する前に開くのは難しいでしょう)。
Crucian_carp

2020/04/18 07:33

お返事ありがとうございます。 保存先のフォルダには"DRF####.xlsx"に当てはまるファイルがいくつも入っている状態で、それらのExcelはすでにオートフィル付きの状態で保存されています。 保存してから開くとなると、いくつもある"DRF####.xlsx"のファイルの中から今回保存したフォルダを探し出すコードを組む必要があるということになり、コードが複雑になりそうでしたので、できれば保存前にオートフィルの処理を行いたいと考えておりました。 参考として、Outlookでxlsxなどの添付ファイルを開く際も、Outlook側で一時的にファイルが保存されているはず →でしたら、Outlook内のパスを指定(出来るかわからずに言っております…)すれば可能ということでしょうか? お手数おかけしますが、ご確認いただけますと幸いです。 よろしくお願いいたします。
m.ts10806

2020/04/18 07:38

質問に追記された方が良さそうな内容です。
Crucian_carp

2020/04/18 07:57

ありがとうございます。そのようにさせていただきます。
m.ts10806

2020/04/18 08:10

情報は古いですが、アプリケーションが取り扱うファイルは大抵一時的にテンポラリーフォルダに保存されます。 http://office-qa.com/Outlook/ol49.htm アプリケーション上に何かでおいてあるとかではないです。 ということで実は、インターネットブラウザでサイトに表示された画像とかも同じようにテンポラリにダウンロードされています。 (なので「キャッシュ」という概念が働きます)
imihito

2020/04/18 08:35

> →でしたら、Outlook内のパスを指定(出来るかわからずに言っております…)すれば可能ということでしょうか? 添付ファイルを開くときにOutlookが自動で行う操作なので、制御は難しいでしょう。 また、保存してから開く場合は、保存したファイルを探す必要はありません。 VBAから「添付ファイルをこの場所に保存してほしい」と指示するため、保存されたファイルのパスはわかっているはずです。
Crucian_carp

2020/04/18 08:44

>m.ts10806さま 教えていただきありがとうございます。 回答いただいている方も仰っているように、tempフォルダを使用する方法を考えるなどした方が良いのかもしれませんね…。
Crucian_carp

2020/04/18 08:52

>imihitoさま お返事ありがとうございます。 また、保存してから開く場合は、保存したファイルを探す必要はありません。 VBAから「添付ファイルをこの場所に保存してほしい」と指示するため、保存されたファイルのパスはわかっているはずです →保存したファイルを開く場合のコードにワイルドカード(#)を使ってしまうとフォルダ内のすべてのファイルが該当してしまうと思い、ダメかなと考えているのですが、別の方法がございますでしょうか?
m.ts10806

2020/04/18 08:53

ただ、テンポラリなので、ファイル名はそのままとは限りませんが・・・(アプリケーションの仕様によると思います)
guest

回答2

0

ベストアンサー

所定の場所に保存し、そのファイルを開いて処理をする? でしょうか

VBA

1For Each at In objItem.Attachments 2 Debug.Print at.FileName 3 4 If at.FileName Like "DRF####.xlsx" Then 5 Dim tmpFile As String 6 tmpFile = destFolderPath & at.FileName 7 at.SaveAsFile tmpFile 8 9 'EXCEL処理 10 Dim objExcel As Excel.Application 11 Set objExcel = New Excel.Application 12 Dim Wb As Workbook 13 Dim Ws As worksheet 14 Set Wb = objExcel.Workbooks.Open(tmpFile) 15 Set Ws = Wb.worksheets("Sheet1") 16 17 'Ws.cells(2, 2).Value = Time 18 19 objExcel.ActiveWorkbook.Close SaveChanges:=True 20 objExcel.Quit 21 Set objExcel = Nothing 22 End If 23 Next at

投稿2020/04/19 05:33

sinzou

総合スコア392

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

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

imihito

2020/04/19 09:44

実用上問題にはならないですが、`objExcel.ActiveWorkbook`は`Wb`の方がいいかもしれませんね
Crucian_carp

2020/05/01 13:08

皆様ご対応誠にありがとうございました。組みたかったマクロを完成させることができました。 諸々ありまして返事が遅くなってしまいましたこと、誠に申し訳ありません。
guest

0

C:\tempなどの一時フォルダに保存してから開いてはいかがでしょうか?
目的のフォルダに保存した後でC:\tempのファイルは削除します。
それならばそんなに複雑なコードではないと思います。

投稿2020/04/18 08:36

ryuno_vanilla

総合スコア119

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問