Macro VBA Outlook: Mover automáticamente el correo electrónico a otra carpeta

VBA - Visual Basic for Application

Para simplificar y agilizar el trabajo con muchos correos, es aconsejable insertar algunos automatismos. Este es el caso, por ejemplo, si recibes muchos correos de un determinado tipo que quieres asignar automáticamente a una determinada subcarpeta.
Ejemplo 1: Recibes muchos correos de tu tienda online con pedidos entrantes y quieres que se muevan automáticamente a una carpeta llamada “Pedidos“.
Ejemplo 2: Simplemente desea mover ciertos correos electrónicos seleccionados de la bandeja de entrada a una carpeta de archivo con un solo clic.

Por supuesto, también puede utilizar las funciones integradas de Outlook para crear reglas automáticas. La siguiente captura de pantalla muestra dónde encontrarlas.

Captura de pantalla de Outlook de cómo crear una regla
Crear regla para mover un correo a sub carpeta

Sin embargo, sin duda hay casos de uso en los que esta no es la herramienta adecuada de primera elección, por ejemplo, si desea desterrar todos los correos electrónicos marcados a una determinada sub carpeta con un solo clic. O si ya dispone de otra macro VBA, por ejemplo, para responder automáticamente a un correo electrónico, y en la misma macro desea marcar el correo de origen como leído y, a continuación, moverlo de la bandeja de entrada a otro lugar.

Código VBA: Mover correo electrónico a subcarpeta

La siguiente captura de pantalla y ejemplo de código muestran cómo mover uno o más correos electrónicos seleccionados a una sub carpeta de la Bandeja de entrada.

Captura de pantalla del editor VBA del código VBA para mover un correo electrónico a una subcarpeta o carpeta de archivo.
Código VBA: Mover correo electrónico a la subcarpeta

Este ejemplo de código recorre todos los correos electrónicos seleccionados en Outlook en el bucle For Each y, a continuación, los mueve a una carpeta especificada (“All Mails”), que es una sub carpeta de la Bandeja de entrada.

Public Sub MoveMail()
    Dim olItem As Outlook.MailItem
    Dim objNS As Outlook.NameSpace
    Dim objFolder As Outlook.MAPIFolder
    Dim destFolder Como Outlook.Folder
    
    'Define la carpeta de destino; en este caso es "All mails", una subcarpeta de "Inbox".
    Set objNS = GetNamespace("MAPI")
    Set objFolder = objNS.Folders.GetFirst ' carpeta del buzón actual.
    Set objFolder = objFolder.Folders("Inbox")
    Set destFolder = objFolder.Folders("All Mails")
    
    'Mover todos los correos seleccionados a la subcarpeta definida.
    For Each olItem In Application.ActiveExplorer.Selection
        olItem.Move destFolder
    Siguiente olItem
End Sub

Para obtener el objeto de la subcarpeta, primero hay que definir el espacio de nombres Mapi (GetNamespace(“MAPI”)). Allí se determina el buzón correspondiente con objNS.Folders.GetFirst. Aquí usamos GetFirst porque el buzón relevante está en primer lugar en Outlook. Si tiene varios buzones de correo, puede navegar hasta ellos con GetNext o dirigirse a ellos directamente a través del índice utilizando .Item(number).

A continuación, defina la bandeja de entrada como una carpeta y acceda a su matriz de carpetas para definir la sub carpeta adecuada de la bandeja de entrada. Esta será la carpeta de destino a la que se moverán los correos electrónicos seleccionados.

Tenga en cuenta que para que el código funcione, varias referencias deben estar activadas en Referencias.

Captura de pantalla de las referencias necesarias en el editor VBA
Configure la biblioteca necesaria en Extras / Vínculos

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *