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

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

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

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

Q&A

2回答

3258閲覧

msgファイルのフォルダパスの取得方法

Gontakun

総合スコア4

VBA

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

0グッド

0クリップ

投稿2020/02/24 10:10

前提・実現したいこと

msgファイルの添付ファイルを、msgファイルと同じフォルダに保存する
Outlook VBA を作成しています。
記載コードのようにフォルダを固定すれば動作しますが、
様々なフォルダにmsgファイルが存在するため、実行時にmsgファイルの
フォルダパスを取得し、変数に設定して動作させたいと思っています。
しかし、色々調べましたが、その取得方法がわかりません。
Outlook VBA の初心者ですが、教えていただけますでしょうか?

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Outlook

1ソースコード 2Sub FileSave() 3 4Dim o_Ins As Inspector 5Dim o_Item As Object 6Dim o_Path As String 7Dim a_File As String 8Dim o_Attachment As Object 9 10Set o_Ins = Application.ActiveInspector 11Set o_Item = o_Ins.CurrentItem 12 13o_Path = "C:\AAA\BBB\" 14 15With o_Item 16 For Each o_Attachment In .Attachments 17 a_File = o_Path & o_Attachment 18 o_Attachment.SaveAsFile a_File 19 Next o_Attachment 20End With 21 22End Sub 23 24### 試したこと 25 26ここに問題に対して試したことを記載してください。 27 28### 補足情報(FW/ツールのバージョンなど) 29 30ここにより詳細な情報を記載してください。

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

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

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

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

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

sinzou

2020/02/24 13:27

様々なフォルダ  とは受信フォルダーの下にサブフォルダーがある でしょうか?
ttyp03

2020/02/25 00:04

拡張子がmsgのファイルを開いて添付ファイルを保存しようとしているのでしょうか。である場合、msgファイルを開く処理があるはずですので、そのコードを提示してください。
nanami12

2020/02/26 08:10

作成しなくてもoutlook 添付ファイル保存マクロとかで 検索すれば、完成したマクロを取得することができますよ。
Gontakun

2020/03/01 08:16

皆さんありがとうございます。 説明不足ですいません。 VBAでmsgファイルを開く処理はしていません。 msgファイルを自分で開いた後に、添付ファイルをmsgファイルと同じフォルダに保存する だけの簡単なコードを作成してみようとしています。(初心者なので、低レベルな作成ですが・・・) 記入したコードのように、添付ファイルを保存するフォルダを固定(o_Path = "C:\AAA\BBB\") すれば動作したのですが、このフォルダを固定せずに、msgファイルが保存されている フォルダにしたいだけです。 msgファイルが"C:\AAA\BBB"に保存されている時もあれば、"C:\CCC\DDD"に保存されている 時もあるので、自分で開いたmsgファイルの保存されているフォルダパスを取得して、変数で コードを作成できないかと思った次第です。
meg_

2020/03/14 00:02

msgファイルはOutlook内にあるのではなく、他の場所(デスクトップ等)に保存してあるという前提の話でしょうか?
Gontakun

2020/03/15 08:57

msgファイルはデスクトップ等の様々な場所に保存してある状態が前提です。 件名や内容によって様々なフォルダに保存しています。Outlook内にはありません。
guest

回答2

0

メールアイテムが保持している情報はOutlookが管理している情報のみだと思われます。
質問の機能を実現するならば、フォルダ選択のところからVBAで実装する必要があるかと思います。

投稿2020/03/15 10:02

meg_

総合スコア10580

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

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

0

こんにちは、修正等補足がないので見切り回答します。

>様々なフォルダにmsgファイルが存在するため、実行時にmsgファイルの
>フォルダパスを取得し、変数に設定して動作させたいと思っています。

フォルダパスを取得する方法が分らないと言う事でしょうか?
Outlook内のフォルダでの操作であれば、一般的なフォルダパスでは無く
Outlookの場合、\アカウント名¥フォルダの形になると思います。
これは、Namespaceオブジェクト.Folders("フォルダ名")と言う事かと思います。

取得に関しては、(あれ?msgファイル操作する時にすでに取得していると思いますが、、)

既定フォルダの場合 
Namespaceオブジェクト.GetDefaultFolder(olFolderInboxなど既定のフォルダーの種類)になります。

ですが、様々なフォルダとなれば、
.Session.AccountsやNameSpace.Foldersを巡回して抽出する必要があります。

Dim fldr As Folder, TargetFolder As Folder
Dim oAccount As Account
Set outlookObj = CreateObject("Outlook.Application")
Set myNameSpace = outlookObj.GetNamespace("MAPI")

For Each oAccount In outlookObj.Session.Accounts For Each fldr In myNameSpace.Folders

     Debug.Print fldr.FolderPath

If fldr = "アカウント名" Then '変更箇所(必須) For i = 1 To fldr.Folders.Count

     Debug.Print "" & fldr.Folders(i) ' 訂正:アカウント内のフォルダ
Next i
条件を設定して
'Set TargetFolder = fldr.Folders(fldr.Folders(1))
End If

Set TargetFolder = fldr.Folders("フォルダ名")でSet出来ると思います。
Outlook内のフォルダでの操作であれば、対象のアカウント名やフォルダ名で操作処理します。

参考まで

投稿2020/02/26 08:00

編集2020/02/26 08:07
Q_Zoo

総合スコア16

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

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

Gontakun

2020/03/01 08:23

回答ありがとうございます。 返信が遅くなりすいません。 VBA初心者なので、自分で開いたmsgファイルの添付ファイルを、msgファイルと 同じフォルダに保存するだけの簡単なコードを作成しています。 o_Path = "C:\AAA\BBB\"のように、添付ファイルを保存するフォルダを固定 すれば動作したのですが、このフォルダを変数にできればと・・・ msgファイルが保存されているフォルダが、"C:\AAA\BBB"や、"C:\CCC\DDD"など と変化するので、自分で開いたmsgファイルの保存されているフォルダパスを取得して、 変数で設定できないかと思っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問