【OutlookVBA】フォルダを移動
- [記事公開]2023.05.29
- VBA
- OutlookVBA
Yahoo!知恵袋から、OutlookのVBAで、受信トレイのフォルダを移動させるには。
質問
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11280183926
Outlookのフォルダの位置を入れ替える(移動)マクロは作れますか?
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11280183926
用途は位置を移動させてもマクロを使用したら固定の配置にできるイメージです
回答
私の回答です。
作れますが、ご質問の内容だけでは分からないことが多くて、具体的なコードを作れないです。
移動させたいフォルダが何という名前でどういうフォルダ配下にあるか(フォルダによっては移動させることができないものもありますので)、位置を移動させるのはユーザの不注意によるものなのか、それとも恣意的なものなのか(それによって考えなければいけないエラー制御の量が変わりますので)、移動させたらすぐもとに戻したいのかそれともある一定の時間が経過した後にまとめてでもよいのか(それによってイベントを使うか、それともバッチ処理でよいかどうかが決まりますので)などなど、分からないことが多くて、ご質問の内容だけではお役には立てないです。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11280183926
以下は、受信トレイ配下に作ったフォルダ1とフォルダ2のうち、フォルダ2をフォルダ1に移動させるコードです。
受信トレイ
変更前↑
├─フォルダ1
└─フォルダ2
受信トレイ
変更後↑
└─フォルダ1
└─フォルダ2
Option Explicit
'フォルダ2をフォルダ1に移動させる
Public Sub MoveToFolder()
Dim NS As Outlook.NameSpace
Dim 受信トレイ As Outlook.Folder
Dim Folder1 As Outlook.Folder
Dim Folder2 As Outlook.Folder
Set NS = Application.GetNamespace("MAPI")
Set 受信トレイ = NS.GetDefaultFolder(olFolderInbox)
Set Folder1 = 受信トレイ.Folders("フォルダ1")
Set Folder2 = 受信トレイ.Folders("フォルダ2")
'フォルダ2をフォルダ1に移動
Folder2.MoveTo Folder1
'後始末
Set Folder2 = Nothing
Set Folder1 = Nothing
Set 受信トレイ = Nothing
Set NS = Nothing
End Sub
解説
特に解説することもないような気がしていますが、コードの説明をしておくと、フォルダ.MoveToでフォルダ移動します。
MoveToには引数が一つあって、移動先のフォルダ(オブジェクト)です。引数はオブジェクト型(Folder型)の値を指定しないといけません。
そもそもの話からすると、OutlookのVBAは他のVBAと少し世界観が違っています。
Applicationですぐいろいろなオブジェクトにアクセスできる訳でなくて、名前空間(NameSpace)を指定しないといけません。
じゃあ、その名前空間というのはたくさんあるのかというと、今のところたった一つしか実装されていなくて、”MAPI”といいます(Message Application Programming Interface)。一つしかないならなくてもよかったのに・・・と思わないでもないですが、将来の拡張性のためかなという気もするので、おとなしく呪文を唱えることにしています(これが呪文です⇒Set NS = Application.GetNamespace(“MAPI”))。
その後、目的のフォルダまでは階層構造を順にたどってアクセスしていきます。
まず受信トレイは、NS.GetDefaultFolder(olFolderInbox)で取得できます。
受信トレイの下にあるフォルダは、受信トレイ.Folders(“○○○”)で取得できます(○○○にはフォルダの名称が入ります)。
調べたこと
ここからディープで濃い話になります。
今回こういうテスト環境を用意しました。
受信トレイの下にフォルダ1とフォルダ2があります。
このフォルダの上で右クリックしてみると、次のような操作が用意されていました。
実際にやってみます。
そこで私は思ったわけです、「これ絶対VBAでもできるよね?」と。
ところが・・・・。
結論から言うと、下に移動ないし上に移動に相当するVBAのメソッドは見つけることができませんでした。
NavigationとかViewの方にあるかな??と調べましたが、それっぽいものは見つかりません。
NavigationFolderにPositionというプロパティがあったので、「ひょっとしたらこれか!?」とも思ったのですが、違いました。
今回質問者様にはフォルダからフォルダへの移動を示しましたが、場合によっては同一フォルダ下における移動もさせたいことがあるであろうと思い調べ始めたら、みごとにドツボにはまりました。
見つけられなかったです(›´÷`‹ )げっそり
私の調べ方が悪いのかもしれませんが・・・。
もちろんSortで解決できる場合もあります。そうではなくて、私が知りたいのは、「下に移動」「上に移動」(あるいは、マウスを使ってフォルダをドラッグで移動)をVBAで実装するにはどうすればよいか?ということです。
この件は継続調査とします(知見者の情報提供お待ちしております)。
Outlookのバージョン情報
Microsoft Outlook for Microsoft 365 MSO (バージョン2304 ビルド16.0.16327.20200) 64ビット
-
前の記事
労働時間等設定改善特別措置法 2023.05.26
-
次の記事
エムポックス 2023.05.30