Cách duyệt đệ quy cây thư mục trong Outlook thông qua VBA

Chia sẻ ngay bây giờ:

Nếu có các thư mục con trong thư mục Hộp thư đến hoặc Mục đã gửi chính, cách duyệt qua chúng theo cách đệ quy và hiệu quả, sử dụng VBA, là một mẹo rất hữu ích. Phần quan trọng này có thể tái sử dụng trong nhiều dự án VBA khác.

Vấn đề quan trọng của việc duyệt các thư mục

Cây thư mục trong OutlookNgười dùng doanh nghiệp và thương mại của Outlook thường có hàng trăm thư mục con bên dưới thư mục hộp thư đến hoặc mục đã gửi chính của họ, với các email có liên quan trong mỗi thư mục đó. Khi có nhu cầu xem qua tất cả các thư mục đó để thực hiện một số hành động đối với các email có trong đó, việc viết các tập lệnh VBA khác nhau cho các thư mục khác nhau sẽ trở thành một cơn ác mộng. Hãy tưởng tượng có năm trăm thư mục bên dưới thư mục Hộp thư đến chính và yêu cầu tập lệnh VBA cho mỗi thư mục đó. Người dùng sẽ phải viết năm trăm tập lệnh duy nhất cho mỗi thư mục đó, với chức năng tương tự. Tệ hơn nữa, nếu cần phải thực hiện một số sửa đổi, tất cả năm trăm tập lệnh sẽ được yêu cầu cập nhật. May mắn thay, có một phương pháp lập trình được gọi là đệ quy, giúp giải quyết vấn đề của chúng ta một cách dễ dàng. Ý tưởng của đệ quy là để một hàm liên tục gọi chính nó và lặp đi lặp lại cùng một mẫu để xử lý tất cả các mục, với cùng một logic. Dưới đây là một kịch bản mẫu mà starts từ thư mục Hộp thư đến chính và lặp qua tất cả các thư mục con và các mục trong mỗi thư mục đó.

Tập lệnh Outlook VBA

Dưới đây là tập lệnh Outlook VBA hoàn chỉnh:

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

Cách chạy tập lệnh

Ấn Bản Alt + F11 để mở trình soạn thảo Outlook VBA và dán đoạn mã trên vào “ThisOutlookSession”. Điều quan trọng cần biết là trước khi chạy tập lệnh này, Microsoft Outlook XX Object library nên được thêm vào các tham chiếu dự án từ menu “Công cụ”, trong đó XX là thư việnrarphiên bản y.

Hiểu kịch bản

Hàm đệ quy“ProcessCurrentFolder” là hàm đệ quy, tự gọi nó nếu một thư mục con được phát hiện trong thư mục hiện tại. Nó sẽ tiếp tục tự gọi lại trừ khi tất cả các thư mụctarting từ hie ban đầurarchy được quét và xử lý. Tập lệnh này sẽ hoạt động với bất kỳ thư mục Outlook nào. “olFolderInbox” có thể được thay thế bằng “olFolderSentMail”, “olFolderOutbox” hoặc có thể là bất kỳ thư mục Outlook không mặc định nào khác. Cũng cần biết rằng không cần thiết phải thực hiện cuộc gọi ban đầu từ thư mục hộp thư đến hoặc hộp thư đi gốc nhưng có thểtart làm việc từ bất kỳ thư mục nào trở xuống. “For Each objMail In objParentFolder.Items” là dòng chính sẽ lặp qua tất cả các mục có trong thư mục hiện tại đang được quét; do đó, đó là nơi người dùng cần đặt mã cần thiết để xử lý các mặt hàng.

Phục hồi sau thảm họa

Nếu bạn gặp phải tình huống Outlook bị treo hoặc lỗi, bạn không cần phải lo lắng về lost email, như DataNumen sẽ đưa cuộc sống của bạn trở lại bình thường bằng cách sửa lỗi hỏng Outlook một cách hiệu quả.

Giới thiệu tác giả:

Mary Underwood là một chuyên gia phục hồi dữ liệu trong DataNumen, Inc., công ty hàng đầu thế giới về công nghệ khôi phục dữ liệu, bao gồm dwg phục hồi và rar sản phẩm phần mềm phục hồi. Để biết thêm thông tin, hãy truy cập www.datanumennăm

Chia sẻ ngay bây giờ:

Được đóng lại.