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 nằm dưới thư mục Hộp thư đến hoặc thư mục Đã gửi chính, với các email liên quan trong mỗi thư mục đó. Khi cần phải duyệt qua tất cả các thư mục đó để thực hiện một số thao tác trên các email chứa trong đó, việc viết các kịch bản VBA khác nhau cho từng thư mục trở nên vô cùng khó khăn. Hãy tưởng tượng có năm trăm thư mục con nằm dưới thư mục Hộp thư đến chính và mỗi thư mục đó cần một kịch bản VBA. Người dùng sẽ phải viết năm trăm kịch bản riêng biệ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 thực hiện một số sửa đổi, tất cả năm trăm kịch bản sẽ cần phải được 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ả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 sẽ liên tục gọi chính nó và lặp lại cùng một mẫu nhiều lần, để 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 bắt đầu từ thư mục Hộp thư đến chính và lặp lại 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 VBA của Outlook 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, thư viện đối tượng Microsoft Outlook XX phải được thêm vào phần tham chiếu của dự án từ menu “Công cụ”, trong đó XX là phiên bản của thư viện.

Hiểu kịch bản

Hàm đệ quyHàm “ProcessCurrentFolder” là hàm đệ quy, tự gọi chính nó nếu phát hiện thấy thư mục con trong thư mục hiện tại. Nó sẽ tiếp tục gọi lại chính nó cho đến khi tất cả các thư mục bắt đầu từ cấu trúc phân cấp ban đầu đượ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 bất kỳ thư mục Outlook nào khác không phải là thư mục mặc định. Điều quan trọng cần biết là không nhất 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 mà nó có thể bắt đầu hoạt động từ bất kỳ thư mục nào trở xuống. Dòng lệnh “For Each objMail In objParentFolder.Items” là dòng lệnh quan trọng sẽ lặp qua tất cả các mục có trong thư mục hiện đ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ục.

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

Nếu bạn gặp phải tình huống Outlook bị lỗi hoặc sập, bạn không cần phải lo lắng về việc mất email, vì 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 khôi phục dwg 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.