SELECCIONAR ARCHIVOS DE UNA CARPETA Y ENVIARLOS POR OUTLOOK SEGÚN CATÁLOGO DE INFORMES

Hola a todos!.

El envío de correos a través de Outlook utilizando VBA es un tema muy visto en manuales, web etc … que se dedican a Excel.

Como ya sabéis, trato de no publicar temas sobre los que la información existente ya es muy abundante. Principalmente porque no aportaría nada nuevo y por otra parte porque así me obligo a buscar alternativas y publicar cosas nuevas o poco publicadas.

En este caso, lo que os propongo es realizar un pequeño proceso mediante el cual vamos a detallar en una hoja una relación de nombres de archivos que normalmente enviamos a nuestros clientes y que luego vamos a seleccionar de la carpeta en la que se encuentran para finalmente enviarlos por Outlook.

Imaginad que tenemos una carpeta con una serie de informes:

SELECCIONAR ARCHIVOS Y ENVIARLOS POR OUTLOOK

Y queremos que seleccionando la carpeta EJEMPLOS se adjunten y se envíen por correo Outlook. Esto lo vamos a especificar de la siguiente manera en nuestro archivo Excel:

SELECCIONAR ARCHIVOS Y ENVIARLOS POR OUTLOOK_1

Como véis debemos indicar el nombre del archivo EXACTAMENTE igual que el que tenemos en la carpeta y sin la extensión.

Una vez que lo tenemos, ejecutaremos el siguiente código, compuesto por una macro que ejecuta una función:

Sub ENVIAR_CORREOS()
'Declaramos variables
Dim sFSO As Object, Directorio As String
Dim dir_Archivo As Variant
'Abrimos ventana de diálogo para seleccionar carpeta
Set dir_Archivo = Application.FileDialog(msoFileDialogFolderPicker)
dir_Archivo.Show
'Si no seleccionamos nada salimos del proceso
If dir_Archivo.SelectedItems.Count = 0 Then
Exit Sub
End If
'Capturamos el directorio
Directorio = dir_Archivo.SelectedItems(1)
'Creamos objeto y ejecutamos función Carpeta
Set sFSO = CreateObject("Scripting.FileSystemObject")
CARPETA sFSO.GetFolder(Directorio)
End Sub

Function CARPETA(ByVal nCarpeta)
'Declaramos variables
Dim olApp As Outlook.Application
Dim olMail As Outlook.MailItem
Dim fin As Long, i As Long, File As Variant
Dim adjunto As String, nFile As String
Dim olMailItem As Variant, Celda As Variant
'Iniciamos función
With Sheets("Hoja1")
fin = Application.CountA(.Range("A:A"))
'recorremos hoja y celda para comprobar si hace
'referencia a varios archivos.
For i = 2 To fin
Set olApp = CreateObject("Outlook.Application")
Set olMail = olApp.CreateItem(olMailItem)
For Each Celda In Split(.Cells(i, 1), "|")
For Each File In nCarpeta.Files
adjunto = File
nFile = Left(File.Name, InStr(File.Name, ".") - 1)
If Celda = nFile Then
'Destinatario
olMail.To = .Cells(i, 2)
'Con copia a
olMail.CC = .Cells(i, 3)
'Con copia oculta
olMail.BCC = .Cells(i, 4)
'Asunto
olMail.Subject = .Cells(i, 1)
'Cuerpo de correo
olMail.HTMLBody = "Buenos días:
Les enviamos los archivos solicitados.
Atentamente."
' Adjuntamos archivo y dejamos correo en bandeja de salida
olMail.Attachments.Add (adjunto)
'Para enviar debéis utilizar Send en lugar de Display
'olMail.Send
olMail.Display
End If
Next File
Next Celda
olMail: Close
olApp: Close
Next i
End With
Set olMail = Nothing
Set olApp = Nothing
End Function

La macro principal selecciona la carpeta y la función recorre todos los archivos que contiene. En el momento que el archivo de la instrucción for-each es igual al archivo especificado en la hoja, procedemos a realizar el envío con Outlook.

Dado que tenemos también el correo del destinatario, con copia (CC) y con copia oculta (CCO) en la misma línea, podemos indicarlo en la macro para que los incluya.

Si queremos enviar a varios destinatarios a la vez, solo tenéis que indicar el correo electrónico seguido de un punto y como “;” y luego el siguiente email (como lo hacéis en Outlook).

Si lo que queréis es adjuntar varios archivos en un correo, debéis utilizar la barra como delimitador la barra vertical “|”. Por ejemplo en la siguiente imagen, el primer correo adjuntará los archivos “EJEMPLO” y “EJEMPLO_2”:

SELECCIONAR ARCHIVOS Y ENVIARLOS POR OUTLOOK_3

El resultado es el siguiente, los tres correos han sido generados y cada uno con su adjunto:

SELECCIONAR ARCHIVOS Y ENVIARLOS POR OUTLOOK_2

En el ejemplo de la macro los dejo en bandeja de salida, si queréis enviarlos directamente, debéis sustituir: olMail.Display por olMail.Send

Y eso es todo! Espero que os haya resultado de interés.

Descarga el archivo de ejemplo pulsando en: SELECCIONAR ARCHIVOS DE UNA CARPETA Y ENVIARLOS POR OUTLOOK SEGÚN CATÁLOGO DE INFORMES

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

4 pensamientos en “SELECCIONAR ARCHIVOS DE UNA CARPETA Y ENVIARLOS POR OUTLOOK SEGÚN CATÁLOGO DE INFORMES

    • a lo que me refiero es, al abrir el cuadro de dialogo para escoger el archivo, como puedo poner que por defecto me abra una carpeta que esta en una red compartida? asi evitar el tener que ir recorriendo toda la ruta hasta donde esta el fichero a enviar.
      Recuerda que la carpeta esta en red y no en mi pc, siendo en mi pc es sencillo fijar que por defecto abra una ruta especificada.

      muchas gracias

      Me gusta

      • Hola Lucas:

        Es sencillo, eliminas la parte que hace referencia a la selección y lo compones así (la macro), la función queda como está.

        Es igual que se trate de una carpeta en red, solo tienes que indicar la ruta

        Sub ENVIAR_CORREOS()
        'Declaramos variables
        Dim sFSO As Object, Directorio As String
        Dim dir_Archivo As Variant
        'INDICAMOS RUTA CARPETA
        dir_Archivo = "C:\Users\USUARIO\CARPETA"
        'Creamos objeto y ejecutamos función Carpeta
        Set sFSO = CreateObject("Scripting.FileSystemObject")
        CARPETA sFSO.GetFolder(dir_Archivo)
        End Sub

        Saludos

        Me gusta

¿Te ha gustado?, Realiza un comentario.

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios .