Macro VBA: Añadir automáticamente un archivo adjunto a un mensaje de correo electrónico

VBA - Visual Basic for Application

Puede acelerar el proceso de añadir un archivo adjunto a un correo electrónico en Microsoft Outlook utilizando una macro adecuada. A menudo se hace clic en “Insertar” a través del menú de cinta ➜ “Añadir archivo” al archivo correspondiente. O primero puede buscar el archivo en el Explorador de Windows y luego arrastrarlo al nuevo correo mediante Arrastrar y soltar. Esto ya es relativamente práctico, pero se puede mejorar con una macro VBA, sobre todo si se envía el mismo archivo una y otra vez o el archivo adjunto está siempre bajo una ruta determinada y corresponde a una nomenclatura concreta. En un artículo anterior ya se mostró cómo guardar automáticamente los archivos adjuntos de un correo electrónico con VBA, ahora se mostrará aquí el camino inverso, es decir, adjuntar archivos a un correo utilizando VBA.

Código VBA

Con el siguiente código VBA primero creamos un nuevo correo Outlook y luego insertamos automáticamente un archivo adjunto en este correo.

Sub NewMailWithAttachment()
    Dim appOutlook As Outlook.Application
    Dim myEmail As Outlook.MailItem

    Set appOutlook = New Outlook.Application
    Set myEmail = appOutlook.CreateItem(olMailItem)
    Configuración myAttachments = myEmail.Attachments
    myAttachments.Add "c:\Users\danie\Desktop\Invoice-2023-01-1938.pdf", _
    olByValue, 1, "SuFactura"
    miCorreo.Mostrar
Final Sub

Al ejecutar este código/macro se abrirá y mostrará un correo electrónico recién creado con el archivo adjunto correspondiente, como se muestra en la siguiente imagen.

Captura de pantalla del código VBA con un nuevo correo electrónico con un archivo adjunto insertado
El código VBA crea un correo electrónico con un archivo adjunto

Explicación del código

La expresión Set appOutlook = New Outlook.Application simplemente crea un objeto de la aplicación Outlook para su posterior uso. Esto se toma entonces para crear el nuevo correo electrónico CreateItem(olMailItem) con. El nuevo objeto de correo electrónico myEmail, tiene una propiedad/objeto que gestiona los archivos adjuntos. Se lo asignamos a nuestro objeto myAttachments.

El método realmente interesante en este caso es myAttachments.Add. A este se le pueden pasar cuatro parámetros en el siguiente orden:

    1. Fuente (obligatorio): es la ruta completa del fichero que se va a adjuntar al correo
    2. Tipo (opcional): define el tipo de archivo adjunto. Este parámetro corresponde a la OlAttachmentType enumeración de la que existen cuatro (ver más abajo)
    3. Posición (opcional): aquí se puede definir dónde se inserta el adjunto en el correo electrónico. Se trata de un valor numérico. Si introduce el valor “1”, el adjunto se coloca al principio del correo electrónico. Con cualquier otro número, el adjunto se sitúa en el punto correspondiente al número de caracteres del texto del e-mail. Si el número es mayor que el número de caracteres del texto del correo electrónico, el archivo adjunto se inserta al final
    4. DisplayName (opcional): Aquí puede dar un nombre diferente al archivo adjunto. Este es el nombre del archivo tal y como aparece luego en el correo electrónico. Sin embargo, este parámetro no funciona en todas las constelaciones. Para que funcione, debe utilizarse el tipo olByValue y el correo electrónico debe estar formateado en formato de texto enriquecido. En el caso de correos electrónicos de texto sin formato o HTML, se utilizaría el nombre de archivo especificado en Fuente.

OlAttachmentType

Como se ha comentado anteriormente, de estos hay cuatro tipos con el siguiente significado:

    • olByReference: Ya no debe utilizar este tipo. Ya no es compatible con las versiones actuales de Outlook
    • olByValue:Con este tipo, el archivo adjunto se inserta en el correo electrónico como una copia del archivo original. Este debería ser el tipo más adecuado para la mayoría de los casos de uso. Si el archivo original se renombra, edita o elimina, esto no afectará al archivo insertado
    • olEmbeddeditem: Este tipo se utiliza al insertar archivos adjuntos en formato de mensaje de Outlook (archivos *.msg)
    • olOLE: este tipo se refiere a objetos especiales para los que Microsoft ha creado el OLE (Object Linking and Embedding). Esto permite que los objetos/aplicaciones se puedan vincular de forma cruzada o incrustar en otras aplicaciones de Microsoft. El mejor ejemplo de esto es cuando se inserta un dibujo de Visio en Word, por ejemplo. Entonces, éste se inserta de tal forma que uno puede editar el dibujo de Visio dentro de Word. Por ejemplo, cuando se inserta un dibujo de Visio en Word, por ejemplo.

Leave a Reply

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