วิธีการสำรวจต้นไม้โฟลเดอร์ซ้ำใน Outlook ผ่าน VBA

แบ่งปันเลย:

หากมีโฟลเดอร์ย่อยภายในกล่องขาเข้าหลักหรือโฟลเดอร์รายการที่ถูกส่งวิธีการข้ามผ่านโฟลเดอร์เหล่านี้ด้วยวิธีการเรียกซ้ำและมีประสิทธิภาพโดยใช้ VBA เป็นเคล็ดลับที่มีประโยชน์มาก ชิ้นสำคัญนี้สามารถนำมาใช้ซ้ำได้ในโครงการ VBA อื่น ๆ อีกมากมาย

ปัญหาที่สำคัญของการข้ามโฟลเดอร์

ต้นไม้โฟลเดอร์ใน Outlookผู้ใช้งาน Outlook ในองค์กรและเชิงพาณิชย์มักจะมีโฟลเดอร์ย่อยหลายร้อยโฟลเดอร์อยู่ภายใต้โฟลเดอร์กล่องจดหมายเข้าหรือโฟลเดอร์ส่งหลัก โดยแต่ละโฟลเดอร์ย่อยจะมีอีเมลที่เกี่ยวข้องอยู่ เมื่อจำเป็นต้องเข้าไปตรวจสอบอีเมลในทุกโฟลเดอร์เหล่านั้น การเขียนสคริปต์ VBA ที่แตกต่างกันสำหรับแต่ละโฟลเดอร์จึงกลายเป็นเรื่องยุ่งยาก ลองนึกภาพว่ามีโฟลเดอร์ห้าร้อยโฟลเดอร์อยู่ภายใต้โฟลเดอร์กล่องจดหมายเข้าหลัก และต้องใช้สคริปต์ VBA สำหรับแต่ละโฟลเดอร์ ผู้ใช้จะต้องเขียนสคริปต์ที่ไม่ซ้ำกันห้าร้อยสคริปต์สำหรับแต่ละโฟลเดอร์เหล่านั้น โดยมีฟังก์ชันการทำงานที่คล้ายกัน และที่แย่ไปกว่านั้น หากจำเป็นต้องแก้ไขใดๆ สคริปต์ทั้งห้าร้อยสคริปต์จะต้องได้รับการอัปเดต โชคดีที่มีวิธีการเขียนโปรแกรมที่เรียกว่าการเรียกซ้ำ (recursion) ซึ่งช่วยแก้ปัญหานี้ได้อย่างง่ายดาย แนวคิดของการเรียกซ้ำคือการที่ฟังก์ชันเรียกตัวเองซ้ำๆ และทำตามรูปแบบเดิมซ้ำแล้วซ้ำเล่า เพื่อประมวลผลรายการทั้งหมดด้วยตรรกะเดียวกัน ด้านล่างนี้คือตัวอย่างสคริปต์ที่เริ่มต้นจากโฟลเดอร์กล่องจดหมายเข้าหลักและวนซ้ำผ่านโฟลเดอร์ย่อยและรายการทั้งหมดในแต่ละโฟลเดอร์เหล่านั้น

สคริปต์ Outlook VBA

ด้านล่างนี้คือสคริปต์ Outlook VBA ฉบับสมบูรณ์:

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 เปิดตัวแก้ไข VBA ของ Outlook แล้ววางโค้ดด้านบนลงใน “ThisOutlookSession” สิ่งสำคัญคือ ก่อนที่จะเรียกใช้สคริปต์นี้ คุณต้องเพิ่มไลบรารี Microsoft Outlook XX Object ลงในการอ้างอิงโปรเจ็กต์จากเมนู “เครื่องมือ” โดยที่ XX คือเวอร์ชันของไลบรารี

ทำความเข้าใจสคริปต์

ฟังก์ชันการเรียกซ้ำ“ProcessCurrentFolder” เป็นฟังก์ชันแบบเรียกตัวเองซ้ำ ซึ่งจะเรียกตัวเองหากพบโฟลเดอร์ย่อยภายในโฟลเดอร์ปัจจุบัน มันจะเรียกตัวเองซ้ำไปเรื่อยๆ จนกว่าจะสแกนและประมวลผลโฟลเดอร์ทั้งหมดตั้งแต่ลำดับชั้นเริ่มต้น สคริปต์นี้จะทำงานได้กับโฟลเดอร์ Outlook ใดๆ ก็ได้ “olFolderInbox” สามารถแทนที่ด้วย “olFolderSentMail”, “olFolderOutbox” หรือโฟลเดอร์อื่นๆ ที่ไม่ใช่โฟลเดอร์เริ่มต้นของ Outlook ก็ได้ สิ่งสำคัญคือไม่จำเป็นต้องเรียกใช้ฟังก์ชันจากโฟลเดอร์กล่องจดหมายเข้าหรือกล่องจดหมายออกหลัก แต่สามารถเริ่มทำงานจากโฟลเดอร์ใดก็ได้ลงไป บรรทัดสำคัญคือ “For Each objMail In objParentFolder.Items” ซึ่งจะวนลูปผ่านรายการทั้งหมดที่อยู่ในโฟลเดอร์ปัจจุบันที่กำลังสแกนอยู่ ดังนั้นนี่คือตำแหน่งที่ผู้ใช้ต้องใส่โค้ดที่จำเป็นเพื่อประมวลผลรายการเหล่านั้น

กู้คืนจากภัยพิบัติ

หากคุณประสบปัญหา Outlook ขัดข้องหรือทำงานผิดปกติ ไม่ต้องกังวลเรื่องอีเมลสูญหาย เพราะ... DataNumen จะทำให้ชีวิตของคุณกลับมาเป็นปกติโดย แก้ไขความเสียหายของ Outlook อย่างมีประสิทธิภาพ

บทนำผู้เขียน:

Mary Underwood เป็นผู้เชี่ยวชาญด้านการกู้คืนข้อมูลใน DataNumen, Inc. ซึ่งเป็นผู้นำระดับโลกด้านเทคโนโลยีการกู้คืนข้อมูล ได้แก่ การกู้คืน dwg และ rar ผลิตภัณฑ์ซอฟต์แวร์กู้คืน ดูข้อมูลเพิ่มเติมได้ที่ wwwdatanumenด้วย.

แบ่งปันเลย:

ความเห็นถูกปิด