Como percorrer uma árvore de pastas recursivamente no Outlook via VBA

Compartilhe agora:

Se houver subpastas na caixa de entrada principal ou na pasta de itens enviados, como percorrê-las de maneira recursiva e eficiente, usando o VBA, é uma dica muito útil. Esta parte crítica é reutilizável em muitos outros projetos VBA.

O problema crítico de percorrer pastas

Árvore de pastas no OutlookUsuários corporativos e comerciais do Outlook frequentemente acabam com centenas de subpastas dentro da caixa de entrada principal ou da pasta de itens enviados, cada uma contendo e-mails relevantes. Quando surge a necessidade de percorrer todas essas pastas para executar alguma ação nos e-mails nelas contidos, torna-se um pesadelo escrever scripts VBA diferentes para cada pasta. Imagine ter quinhentas pastas dentro da pasta principal da Caixa de Entrada e a necessidade de um script VBA para cada uma delas. O usuário teria que escrever quinhentos scripts exclusivos para cada uma dessas pastas, com a mesma funcionalidade. Para piorar a situação, se houver necessidade de fazer alguma modificação, todos os quinhentos scripts precisarão ser atualizados. Felizmente, existe uma metodologia de programação conhecida como recursão, que resolve nosso problema com facilidade. A ideia da recursão é que uma função se chame repetidamente e percorra o mesmo padrão várias vezes, a fim de processar todos os itens com a mesma lógica. Abaixo, segue um exemplo de script que começa na pasta principal da Caixa de Entrada e itera por todas as subpastas e itens em cada uma dessas pastas.

Script VBA do Outlook

Abaixo está o script VBA completo do Outlook:

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

Como executar o script

Imprensa Alt + F11 Abra o editor VBA do Outlook e cole o código acima em “ThisOutlookSession”. É importante saber que, antes de executar este script, a biblioteca de objetos Microsoft Outlook XX deve ser adicionada às referências do projeto no menu “Ferramentas”, onde XX representa a versão da biblioteca.

Entenda o roteiro

Função de Recursão“ProcessCurrentFolder” é uma função recursiva que se chama a si mesma se uma subpasta for encontrada dentro da pasta atual. Ela continuará se chamando até que todas as pastas, a partir da hierarquia inicial, sejam verificadas e processadas. Este script funciona com qualquer pasta do Outlook. “olFolderInbox” pode ser substituído por “olFolderSentMail”, “olFolderOutbox” ou qualquer outra pasta não padrão do Outlook. É importante saber também que não é necessário fazer a chamada inicial a partir da pasta raiz da caixa de entrada ou da caixa de saída; o script pode começar a funcionar a partir de qualquer pasta na hierarquia. “For Each objMail In objParentFolder.Items” é a linha principal que itera por todos os itens contidos na pasta atual que está sendo verificada; portanto, é nesse local que o usuário precisa inserir o código necessário para processar os itens.

Recuperar-se do Desastre

Se você se deparar com uma situação de travamento ou falha do Outlook, não precisa se preocupar com a perda de e-mails, pois DataNumen deve trazer sua vida de volta ao normal por corrigindo a corrupção do Outlook de uma maneira eficiente.

Introdução do autor:

Mary Underwood é especialista em recuperação de dados em DataNumen, Inc., líder mundial em tecnologias de recuperação de dados, incluindo recuperação de dwg e rar produtos de software de recuperação. Para mais informações visite www.datanumen.com

Compartilhe agora:

Comentários estão fechados.