VBA Guardar archivo adjunto de correo electrónico

VBA - Visual Basic for Application

Outlook es un programa muy extendido, sobre todo en el ámbito profesional, para gestionar y procesar correos electrónicos y por supuesto mucho más, si sólo pensamos en el calendario y la gestión de tareas.

Una gran ventaja de Outlook sobre otros clientes de correo electrónico es que viene con VBA (Visual Basic for Applications), lo que permite automatizar muchas tareas adicionales si las funciones apropiadas no se pueden realizar ya a través de las reglas y funciones integradas de Outlook.

Guardar automáticamente un archivo adjunto de correo electrónico con VBA

Una tarea que puede ahorrarle muchos clics es guardar archivos adjuntos de correo electrónico. Si tiene los típicos correos electrónicos recurrentes cuyos archivos adjuntos deben guardarse siempre en la misma ruta, tendrá que hacer clic en esta ruta cada vez con el cuadro de diálogo “Guardar como.

Utilizando VBA, puede escribir una macro para guardar el archivo adjunto del correo electrónico. También puede asignar un acceso directo a la macro o insertar un botón en la barra para un acceso rápido. De este modo, sólo necesitará hacer clic o pulsar una tecla para guardar el archivo adjunto del correo electrónico. Una macro de este tipo también puede combinarse con otras macros para que, por ejemplo, el adjunto de correo electrónico se imprima mediante VBA al mismo tiempo.

Código VBA para guardar el archivo adjunto del correo electrónico de Outlook

El siguiente código VBA se puede utilizar para guardar los archivos adjuntos de correo electrónico bajo una ruta de carpeta fija. Sólo se guardan los archivos adjuntos del correo seleccionado.

En Outlook, se puede acceder al Editor básico visual pulsando Ctrl+F11. También es posible a través del menú Herramientas de desarrollo. Visual Basic.


Public Sub GuardarAnexos()

    Dim objOL As Outlook.Application
    Dim objMsg As Outlook.MailItem
    Dim objAttachments As Outlook.Attachments
    Dim objSelection As Outlook.Selection
    Dim i As Long
    Dim lngCount As Long
    Dim strFile As String
    Dim strFolderpath As String
    
    Instanciar el objeto Outlook Application
    Set objOL = CreateObject("Outlook.Application")
    
    Obtener la colección de objetos seleccionados (e-mails)
    Set objSelection = objOL.ActiveExplorer.Selection
    
    ' Establece la ruta de la carpeta donde se guardará el archivo adjunto del correo electrónico
    strFolderpath = "c:\Users\AnyUser\Documents\subfolder\bills\year_2020\"
    
    ' Comprueba cada objeto seleccionado (correo electrónico) para ver si tiene un archivo adjunto. Si el archivo adjunto existe,
    ' entonces guárdelo en la ruta de la carpeta.
    Para cada objMsg en objSelection
    
        ' Determina los adjuntos del objeto seleccionado (e-mail).
        Set objAttachments = objMsg.Attachments
        lngCount = objAttachments.Count
    
        If lngCount > 0 Then
    
            ' Aquí usamos un contador hacia atrás, pero también debería funcionar al revés.
    
            For i = lngCount To 1 Paso -1
    
                Guarde el archivo adjunto antes de borrarlo del elemento.
                Determine el nombre del archivo
                strFile = objAttachments.Item(i).FileName
    
                Combina la ruta de la carpeta con el nombre del archivo
                strFile = strRutaCarpeta & strFile
    
                ' Guardar el adjunto como un archivo
                objAttachments.Item(i).SaveAsFile strFile
    
            Siguiente i
    
        Fin If
    Siguiente
    
ExitSub:
    Set objAttachments = Nada
    Set objMsg = Nada
    Set objSelection = Nada
    Set objOL = Nada
End Sub

Llamar macro de Outlook mediante acceso rápido

Ahora puedes llamar o ejecutar la macro, siempre que sea Pública, a través del Herramientas de desarrollo => Macro => Diálogo de macros. O puede colocar un botón en el acceso rápido. Con la pequeña flecha que apunta hacia abajo en el acceso rápido, seleccione “Más comandos…” o vaya a Archivo => Opciones => Barra de herramientas de acceso rápido.

Captura de pantalla Asignar botón de acceso rápido de Outlook para ejecutar macro
Asignar botón de acceso rápido de Outlook para ejecutar macro

.

En la ventana de diálogo que se abre a continuación, limite los comandos a macros y añada la macro en cuestión.

Captura de pantalla Barra de herramientas de opciones de Outlook para acceso rápido
Selecciona la macro y añádela al acceso rápido a través del botón Añadir

A continuación, mediante el botón “Cambiar“, puede asignar un icono o ajustar el texto.

One comment

  1. Hola! Muchas gracias por compartir tu información, es un post muy interesante y que facilita mucho el trabajo!

    Tengo una pregunta al respecto, si en la carpeta destino ya hay otro archivo con el mismo nombre, ¿será capaz de sobrescribirlo?. Utilizo la macro para descargarme informes actualizados de datos automáticamente, así que veo que puede ser un problema.
    Otro problema que me surge es que el archivo adjunto que me llega por correo no tiene exactamente el mismo nombre que el que quiero reemplazar, y su nombre cambia cada día porque incluye la fecha, ¿hay alguna manera de que antes de que la macro descargue el archivo, cambie su nombre al que ya existe en la carpeta? Así después podría sobrescribirlo y tener mis datos actualizados.

    Muchas gracias por tu ayuda y, una vez más, gracias por tus aportaciones.

    Un saludo,

    Ana

Leave a Reply

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