SELECCIONAR ARCHIVOS DE UNA CARPETA Y ENVIARLOS POR OUTLOOK SEGÚN EL NOMBRE DE LA CARPETA

Hola a todos!:

Parece que este 2019 ya se va apagando poco a poco!. Y en breve estaremos iniciando el 2020. Espero que todo nos vaya muy bien y se cumplan nuestros sueños y proyecto.

Mientras tanto, voy a escribir un post como respuesta a una consulta:

Hola Segu, una duda, necesito hacer estos envios, pero en lugar de tener el nombre de los aduntos, lo que tengo es el nombre de las carpetas. Mi macro debe recorrer esos nombres, ir abriendo cada carpeta y adjuntando para cada persona todos los archivos que contengan esas rutas.

Es decir, para el destinatario “MANUEL” tengo que ir a la carpeta en ruta que se llame Manuel y enviar en un correo todos los archivos contenidos en esa ruta..

No consigo que me adjunte los archivos..

¿Puedes ayudarme? Gracias

Esta consulta viene como referencia a un post inicial en el que programé un procedimiento automático de envío de archivos según los tengamos detallados en nuestra hoja Excel. Este es el post: SELECCIONAR ARCHIVOS DE UNA CARPETA Y ENVIARLOS POR OUTLOOK SEGÚN CATÁLOGO DE INFORMES

En este caso, lo que el lector solicita es que el código recorra todas las carpetas y cuando se encuentra con las que hemos indicado, adjunte en para cada nombre/carpeta todo el contenido de la misma en el correo de outlook.

Vamos a aprovechar la macro del proceso anterior y modificar algunas rutinas para realice lo que necesitamos:

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.
Set olApp = CreateObject("Outlook.Application")
Set olMail = olApp.CreateItem(olMailItem)
'Recorremos todas las carpetas y subcarpetas
For Each subcarpeta In nCarpeta.SubFolders
CARPETA subcarpeta
Next subcarpeta
For i = 2 To fin
'Si la carpeta se llama igual a la que tenemos en la hoja
'Adjuntamos todo su contenido
If .Cells(i, 1) = nCarpeta.Name Then
For Each File In nCarpeta.Files
adjunto = File
nFile = Left(File.Name, InStr(File.Name, ".") - 1)
'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
Next File
End If
Next i
olMail: Close
olApp: Close
End With
Set olMail = Nothing
Set olApp = Nothing
End Function

A diferencia del post anterior, en este caso vamos a recorrer todas las carpetas y subcarpetas hasta encontrar la que coincida con la hemos especificado en la hoja. En el momento que lo haga adjuntaremos todos los archivos a Outlook.

Por ejemplo, si elijo uno de mis post (donde guardo todos los archivos con los que escribo la entrada, imágenes, excel, etc):

SELECCIONAR ARCHIVOS DE UNA CARPETA Y ENVIARLOS POR OUTLOOK SEGÚN EL NOMBRE DE LA CARPETA

Y esta sería la carpeta:

SELECCIONAR ARCHIVOS DE UNA CARPETA Y ENVIARLOS POR OUTLOOK SEGÚN EL NOMBRE DE LA CARPETA_1

Con un total de 6 archivos que tendríamos que adjuntar. Si ejecutamos la macro y seleccionamos la carpeta en la que se encuentran los datos, generaremos el siguiente email:

SELECCIONAR ARCHIVOS DE UNA CARPETA Y ENVIARLOS POR OUTLOOK SEGÚN EL NOMBRE DE LA CARPETA_2

Como podéis observar, aquí tenemos el correo con todos los adjuntos de la carpeta que hemos indicado.

Y esta ha sido la contestación a la consulta, espero que también a vosotros os sea de utilidad para vuestros procedimientos de envío.

Descarga el archivo de ejemplo pulsando en: SELECCIONAR ARCHIVOS DE UNA CARPETA Y ENVIARLOS POR OUTLOOK SEGÚN EL NOMBRE DE LA CARPETA

¿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

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

ENVIAR FIRMA CON IMAGEN Y TEXTO DESDE OUTLOOK USANDO EXCEL Y VBA

Hola a todos, ¿qué tal estáis?, espero que muy bien.

En el post de hoy voy os mostraré un método para incorporar imágenes y texto en un correo que vamos a enviar desde Outlook pero utilizando VBA en Excel.

Este tema suele ser muy recurrente y no es la primera vez que me piden en la web una macro para realizar esta tarea.

En una hoja Excel utilizaré dos columnas, una para indicar el correo electrónico y otra para indicar el texto de correo que queremos enviar:

ENVIAR FIRMA CON IMAGEN Y TEXTO DESDE OUTLOOK USANDO EXCEL Y VBA

Para enviar el correo utilizaremos la siguiente macro:

ENVIAR FIRMA CON IMAGEN Y TEXTO DESDE OUTLOOK USANDO EXCEL Y VBA1

El código os lo dejo como imagen (el motivo es el campo HTMLBody que al tener caracteres en HTML se ejecutan en el post y hacen que no se vea correctamente). De todas formas, en el adjunto lo podéis copiar.

En esta macro generamos un correo por cada línea de datos que tengamos en la hoja “CORREO”. Para que la imagen sea visible y se pueda embeber o incrustar en el correo primero hacemos referencia al lugar en el que se encuentra del equipo, en este caso es el logo de Excel Signum:

imagen = "C:\Users\Segu\Documents\EXCEL SIGNUM\EXCELSIGNUM.jpg"

Una vez que la hemos seleccionado la adjuntamos al correo e indicamos que no sea visible como archivo adjunto:

.Attachments.Add imagen, 0

Ahora que ya la tenemos, componemos con Html la firma del correo:

ENVIAR FIRMA CON IMAGEN Y TEXTO DESDE OUTLOOK USANDO EXCEL Y VBA2

En la firma he incluido un hipervínculo a mi web y hago referencia a la imagen que hemos adjuntado y ocultado para que se muestre en el cuerpo del correo. Para que quede como si fuese una firma lo ponemos al final e incorporamos unos cuantos saltos de línea “br” antes del texto que he incluido en la variable “texto”.

El resultado es el siguiente:

ENVIAR FIRMA CON IMAGEN Y TEXTO DESDE OUTLOOK USANDO EXCEL Y VBA3

Como podéis observar, ya tenemos nuestra firma con imagen y texto (y un vínculo) en nuestro cuerpo de correo. Perfecto!.

Este método solo funcionará correctamente en outlook, dado que estamos trabajando en todo momento con el objeto Outlook.applicatacion.

Y eso es todo, espero que os resulte de interés y lo podáis usar en vuestras comunicaciones.

Descarga el archivo de ejemplo pulsando en: ENVIAR FIRMA CON IMAGEN Y TEXTO DESDE OUTLOOK USANDO EXCEL Y VBA

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

Donate Button with Credit Cards

¡¡Muchas gracias!!