VBAを介してOutlookでフォルダツリーを再帰的にトラバースする方法

今すぐ共有:

メインの受信トレイまたは送信済みアイテムフォルダー内にサブフォルダーがある場合、VBAを使用して、再帰的かつ効率的な方法でそれらをトラバースする方法は、非常に役立つヒントです。 この重要な部分は、他の多くのVBAプロジェクトで再利用できます。

フォルダをトラバースする際の重大な問題

OutlookのフォルダツリーOutlook の企業ユーザーや商用ユーザーは、メインの受信トレイや送信済みアイテム フォルダーの下に、関連するメールがそれぞれ格納された数百ものサブフォルダーを持つことがよくあります。これらのフォルダーすべてを調べて、その中に含まれるメールに対して何らかのアクションを実行する必要が生じた場合、フォルダーごとに異なる VBA スクリプトを作成するのは悪夢になります。メインの受信トレイ フォルダーの下に 500 個のフォルダーがあり、それぞれに VBA スクリプトが必要であることを想像してみてください。ユーザーは、同様の機能を持つ 500 個の固有のスクリプトを各フォルダーごとに作成する必要があります。さらに悪いことに、何らかの変更が必要になった場合、500 個すべてのスクリプトを更新する必要があります。幸いなことに、再帰と呼ばれるプログラミング手法があり、この問題を簡単に解決できます。再帰の考え方は、関数が繰り返し自身を呼び出し、同じロジックですべてのアイテムを処理するために同じパターンを何度も繰り返すことです。以下は、メインの受信トレイフォルダから開始し、各フォルダ内のすべてのサブフォルダとその中のアイテムを順に処理するサンプルスクリプトです。

OutlookVBAスクリプト

以下は完全なOutlookVBAスクリプトです。

Private Sub Main()
    Dim objNameSpace As Outlook.NameSpace
    Dim objMainFolder As Outlook.Folder
    
    Set objNameSpace = Application.GetNamespace("MAPI")
    Set objMainFolder = objNameSpace.GetDefaultFolder(olFolderInbox)
    
    Call ProcessCurrentFolder(objMainFolder)
End Sub
 
Private Sub ProcessCurrentFolder(ByVal objParentFolder As Outlook.MAPIFolder)
    Dim objCurFolder As Outlook.MAPIFolder
    Dim objMail As Outlook.MailItem
    
    On Error Resume Next
    
    '    Process each items in the folder
    For Each objMail In objParentFolder.Items
        '    Do your task here ...
    Next
    
    '    Process the subfolders in the folder recursively
    If (objParentFolder.Folders.Count > 0) Then
        For Each objCurFolder In objParentFolder.Folders
            Call ProcessCurrentFolder(objCurFolder)
        Next
    End If
End Sub

スクリプトの実行方法

メディア掲載 Altキー+ F11 Outlook VBA エディターを開き、上記のコードを「ThisOutlookSession」に貼り付けてください。このスクリプトを実行する前に、「ツール」メニューから Microsoft Outlook XX オブジェクトライブラリをプロジェクト参照に追加しておくことが重要です。ここで、XX はライブラリのバージョンです。

スクリプトを理解する

再帰関数「ProcessCurrentFolder」は再帰関数で、現在のフォルダー内にサブフォルダーが見つかった場合に自身を呼び出します。最初の階層から始まるすべてのフォルダーがスキャンされ処理されるまで、自身を呼び出し続けます。このスクリプトは、任意の Outlook フォルダーで動作します。「olFolderInbox」は、「olFolderSentMail」、「olFolderOutbox」、またはその他のデフォルト以外の Outlook フォルダーに置き換えることができます。また、最初の呼び出しをルートの受信トレイまたは送信トレイ フォルダーから行う必要はなく、任意のフォルダーから下位に動作を開始できることも重要です。「For Each objMail In objParentFolder.Items」は、スキャン中の現在のフォルダーに含まれるすべてのアイテムを反復処理する重要な行です。したがって、アイテムを処理するために必要なコードをユーザーが記述する必要があるのは、この行です。

災害からの回復

Outlookがクラッシュまたは障害を起こした場合でも、メールが失われることを心配する必要はありません。 DataNumen によってあなたの人生を通常に戻すでしょう Outlookの破損を修正する 効率的な方法で。

著者紹介:

メアリーアンダーウッドは、のデータ復旧の専門家です DataNumen、Inc。は、以下を含むデータ復旧技術の世界的リーダーです。 dwgリカバリ (NAIST) と rar 回復ソフトウェア製品。 詳細については、次のWebサイトをご覧ください。 WWW。datanumen.com

今すぐ共有:

コメントは締め切りました。