




Podemos enviar email con archivo adjunto desde hoja Excel.

En la columna A disponemos de los encabezados de los datos del email y en la columna B escribiremos los valores del email.
A | |
---|---|
1 | |
2 | Para: |
3 | CC: |
4 | CCOO: |
5 | Asunto: |
6 | Mensaje: |
7 | Archivo adjunto: |
8 | Archivo adjunto 2: |
- VALORES DEL EMAIL
Ir a: Celda B2 / Escribir: email1@email.com. O el correo deseado del destinatario.
Ir a: Celda B3 / Escribir: email2@email.com. O el correo deseado con copia.
Ir a: Celda B4 / Escribir: email3@email.com. O el correo deseado con copia oculta.
Ir a: Celda B5 / Escribir: Informe mensual. O el asunto deseado para el correo.
Ir a: Celda B6 / Escribir:
Buenos días
Remito el informe mensual con los datos actualizados.
Saludos.
Podemos incluir en la celda, saltos de línea con el atajo de teclado Alt+Enter.
Ir a: Celda B7 / Escribir: C:\Informe1.pdf. O la ruta y el archivo 1 adjunto.
Ir a: Celda B8 / Escribir: C:\Informe2.pdf. O la ruta y el archivo 2 adjunto, si se desea.
Guardar Informe1.pdf e Informe2.pdf en la ruta indicada, como archivos adjuntos.
- CREAR MACRO
Con Excel abierto.
Pulsar la tecla Alt y mantener pulsada / Pulsar la tecla F11. Mostrará el editor de Visual Basic.
Ir a: Barra de Menú / Insertar / Módulo. Mostrará la ventana del módulo donde escribimos la macro.
Escribir el código de la macro:
Sub Email_Adjunto()
Dim mi_App As Object
Dim mi_Correo As ObjectSet mi_App = CreateObject("Outlook.Application")
mi_App.Session.logonSet mi_Correo = mi_App.CreateItem(0)
ActiveWorkbook.SaveOn Error Resume Next
With mi_Correo
.To = Range("B2").Value
.CC = Range("B3").Value
.BCC = Range("B4").Value
.Subject = Range("B5").Value
.Body = Range("B6").Value
.Attachments.Add Range("B7").Value
.Attachments.Add Range("B8").Value
.DeleteAfterSubmit = False
.Send
End WithMsgBox "Email enviado con éxito"
On Error GoTo 0
Set mi_Correo = Nothing
Set mi_App = NothingEnd Sub
.DeleteAfterSubmit = False; Almacena copia en bandeja enviados; True, no almacena.
Guardar el libro con la extensión *.xlsm. Libro habilitado para macros.
- INSERTAR BOTÓN
Ir a: Cinta de opciones / Pestaña: Desarrollador / Grupo: Controles / Insertar / Controles de formulario / Botón.
Ir a la hoja / Trazar un área rectangular para el botón. Mostrará ventana de Asignar macro.
Ir a: Nombre de la macro / Clic sobre: Email_Adjunto. Para seleccionar la macro.
Pulsar el botón Aceptar. Asigna la macro al botón.

- INSERTAR REFERENCIA
Con Excel abierto.
Pulsar la tecla Alt y mantener pulsada / Pulsar la tecla F11. Mostrará el editor de Visual Basic.
Ir a: Barra de Menú / Herramientas / Referencias. Mostrará la ventana de referencias VBAProject.
Activar la casilla: Microsoft Outlook 16.0 Object Library (El número representa la versión de Excel).
Pulsar el botón Aceptar. Cierra la ventana y activa la libreria.
- EJECUTAR MACRO
Ejecutar la macro "Email_Adjunto".
Mostrará mensaje de confirmación de envío.
Verificar como se envía el email con el archivo adjunto a los datos del rango B2:B8.

Son herramientas muy importanyes gracias
Buenos días, me da un error en la línea:
Set mi_Correo = mi.App.Createltem(0)
Hola Pedro,
Revisa el código que esté escrito igual a como se indica.
Saludos.
a mi me pasa lo mismo, no me funciona
Set mi_App=mi_App.Createltem(0)
Hola P,
La línea que indicas Set mi_App=mi_App.Createltem(0); no es correcta Set mi_Correo=mi_App.Createltem(0) como se indica en el post.
Saludos.
Hola, lo tengo escrito tal cual, sin embargo, me sale un error de compilación, "No se ha definido el tipo definido por el usuario".
Gracias !! Funciona perfectamente... Consuta como puedo dejar como variable las opciones "Para:" Dato1 y
Archivo Adjunto
Hola Rodrigo,
No identifico tus necesidades, ya que los datos son variables según lo que escribas en las celdas.
Saludos.
buenas, como ago si quiero agregar mas destinatarios?
esta excelente su trabajo. felicidades
Hola Rodrigo,
En la celda B3 escribir los correos separados por punto y coma(;)
email2@email.com;email100@email.com;email200@email.com
Saludos
Buenas, tengo una duda, me vale todo pero tengo un excel que automaticamente me carga la ruta de los archivos adjuntos. ¿Como hago para que pille todos los adjuntos de las rutas que se generan?. Algunas veces sera del rango "b2:b5" y otras"b2:b18" por ejemplo. Poniendo range("b2", range("b2").End(x1Down)) me da fallo, es la que uso para que elija hasta la ultima fila con datos.
Y poniendo una por una cada vez lo veo un rollo.......
Por favor si me puedes ayudar te estaría eternamente agradecido!!!!
Buenas, gracias por la información
¿Como agrego varios adjuntos sin tener que elegir uno por uno?
Tengo un rango de columna (B2:b50) con todas las rutas de los archivos, como hago para que pille de ese rango los archivos.
Hola Javier,
Puedes aplicar el rango en el código. Localiza la línea: .CC=Range("B4").Value e indica tu rango.
Saludos.
hola, quisiera hacer esto pero a 100 direcciones distintas, 100 adjuntos distintos, o sea uno para cada uno. serian 100 correos distintos, me explico?
que se automatice, en una columna las direcciones de email y en otra las rutas de los adjuntos.
gracias
saludos
mariano
Hola Mariano,
Revisa las respuestas a los comentarios.
Saludos.
Hola,
He revisado esa información en los comentarios y no la encuentro. ¿Podría por favor explicarla?
Mil gracias.
Saludos
Yo también!
Hola Silvia,
En la celda B4 escribe los destinatarios como se indica la respuesta a Rodrígo.
Saludos.
Hola, lo que pretendo no es aumentar los destinatarios. Querría enviar a cada destinatario su documento en un único mail individual. Finalmente le he añadido la función de mailing a una macro que recorre todos los contactos y les asigna su adjunto con el mismo nombre. Muchas gracias.
Un saludo
Yo quiero hacer lo mismo, no encuentro como hacerlo
Hola, si tengo varias casillas en mi outlook se puede elegir por cual enviar el correo
Saludos.
Hola Daniel,
Imagino que por casillas te refieres a varias cuentas de correo en outlook? Si es así es muy complejo poder seleccionar desde que cuenta mandar el correo, siempre toma la predeterminada.
Opción cambiar la cuenta predeterminada por la deseada (en outlook).
Saludos.
Hola, tengo este codigo:
...
...
With ActiveWorkbook
Set client = Cells(3,3)
.sendMail.Body Recipients:="correo@correo", Subject:="asunto"
End With
...
...
Hola Luis,
Pero no explicas que quieres hacer con el código...
Saludos.
¿se necesita habilitar algun complemento? porque lo corro y no me da error pero tampoco hace nada, no envía nada
Hola Pablo,
Revisa el nivel de seguridad de las macros que tengas en Office.
Saludos.
y como se revisa ese nivel de seguridad?
Hola Andrés,
En pestaña: Desarrollador / Grupo: Código / Seguridad de macros.
Saludos.
Excelente, trabaja super bien.
Muchas gracias por esta publicacion!
Estoy muy agradecido
Hola
Tengo una Macro que me guarda una de las hojas del fichero Excel dónde he escrito la Madro como ficehro PDF y posteriormente la envía por email a diversos usuarios. El fichero se guarda correctamente y el email también se envía, pero nunca adjunta dicho fichero....Estoy trabajando con Excel 365. ¿Sabes qué puede estar pasando? Gracias por tu ayuda!
Hola Mónica,
Si más información es difícil.
- Revisar el código de la macro.
- Donde se guarda el pdf, servidor, equipo, etc.
- La url del archivo pdf, local, etc.
Saludos.
Set mi_App = CreateObject(“Outlook.Application”)
mi_App.Session.logon
Cada vez que le doy enviar me sale error 424. Y me marca el siguiente ítem
Hola Marne,
Deberás de asignar la referencia de Outlook.
Desde VBA / Barra de menús / Herramientas / Referencias / Buscar y activar: Microsoft Outlook xx.0 object library. (xx.0 será la versión de tu Excel).
Saludos.
Sub Email_Adjunto()
Dim mi_App As Object
Dim mi_Correo As Object
Set mi_App = CreateObject(“Outlook.Application”)
mi_App.Session.logon
Set mi_Correo = mi_App.CreateItem(0)
ActiveWorkbook.Save
On Error Resume Next
With mi_Correo
.To = Range(“B2”).Value
.CC = Range(“B3”).Value
.BCC = Range(“B4”).Value
.Subject = Range(“B5”).Value
.Body = Range(“B6”).Value
.Attachments.Add Range(“B7”).Value
.Attachments.Add Range(“B8”).Value
.DeleteAfterSubmit = False
.Send
End With
MsgBox Email
On Error GoTo 0
Set mi_Correo = Nothing
Set mi_App = Nothing
End Sub
COMENTO TENGO HABILITADO EL OUTLOOK, PERO SIGUE EN LA MISMA
Hola Marne,
Borra todas las comillas del código y escribelas, al copiarlas se copian como tipográficas y en el editor de VB no funcionan.
Saludos.
Buenas tardes
Me sale un error de compilación
Error de Sintaxis
Hola Jhon,
Revisa el código hay algo mal escrito.
Saludos.
Buenas tardes, consulta. En la casilla archivos adjuntos, se puede especificar la hoja
Hola Marne,
Este código no sirve, pero consulta el siguiente post.
Saludos.
Buenas
Si necesito que en el campo del asunto me envie varias celas por ejemplo la B6 y C6 como debo indicar el rango?
gracias
Hola Xavier,
.Subject con la indicación de las celdas B6;C6.
Saludos.
Hola buen dia!!!
si quiero utilizar una Mac para mandar el correo en vez de Outlook cual seria el codigo?
gracias!!
Hola, la macro como tal funciona correctamente. como puedo hacer que el mensaje se envié varias celdas.
Le intenté de esta forma: .Body = Range("B6;C6).Value
pero al momento de ejecutar la macro el correo llega vacío.
Hola Jorge,
Prueba con: .Body = Range("B6") & " " & Range("C6").Value
Saludos
Hola,
probé .Body = Range("B6") & " " & Range("C6").Value pero solo envía la celda B6 lo demás no llega,
podrías yudarme por favor.
Ya lo resolví, podrías ayudarme para que además del texto pueda insertar una tabla.
Hola Angélica,
Revisa las etiquetas de Outlook Existen más post relacionados.
Saludos.
Hola Angélica,
La expresión es correcta, verificada la macro con:
.Body = Range("B6") & " " & Range("B7").Value
Saludos.
Hola Como puedo cambiar el correo de from para que sea un Generico es decir no quiero que salga del mio si no del otro que tengo como generico?
Hola Carlos,
Lo más fácil es cambiar la cuenta de correo a predeterminada.
Saludos.
Hola, necesito ayuda, seguí todos los pasos y el email se envió sin problema pero no contenía el archivo adjunto
Hola Carlos,
Revisa: .Attachments.Add Range("B7").Value y .Attachments.Add Range("B8").Value que indique la ruta el archivo y la extensión.
Saludos.
Hola, quería enviar desde una carpeta de fotos, una foto distinta a un email distinto de un listado de emails donde tengo los datos del destinatario.
Esta Macro me podría servir?
Qué cambios tendría que hacer?
Gracias
Andrés
Hola , como ingreso el correo emisor?
gracias
Hola Franco,
Revisa el siguiente post.
Saludos.
Necesito validar si se adjunto un archivo y me salga un mensaje si no está adjuntó.
Hola Carlos,
Puedes incluir:
If IsEmpty(Range("B7")) Then
MsgBox "Indicar archivo adjunto"
End If
Saludos
Hola, no me adjunta el archivo pero si envía el correo... esto se debe a?
Hola Ivan,
Revisa que el adjunto se encuentra en la URL indicada con el nombre del archivo y la extensión.
Saludos
Buen día, de antemano agradecerte por tu valiosa ayuda. Mi pregunta es, si quiero enviar el correo desde gmail en el código que debo colocar para que reconozca que se enviara desde ese webmail. Mil gracias.
Hola Juan Carlos,
Próximamente publicaremos un post con una macro que lo permita.
Saludos.
Hola! excelente el código, gracias!
Una consulta, necesitaría que la macro incluya la firma predeterminada de Outlook (que incluye una imagen). qué debería agregarle al código? Gracias!!
Hola Florencia,
En breve publicare una entrada al respecto.
Saludos.
Buenos días, el código no contiene error pero no se envía nada adicional hice lo de seguridad de macro habilite todo pero igual no se envia, por favor me podria ayudar
Hola Isabel,
Si el código no contiene error entonces de te reenviará el correo. Revisa insertar referencia y que tengas una cuenta de Office Outlook activa.
Saludos.
Estimado una consulta:
Como puedo hacer para que excel mande una alerta por correo outlook con 4 y 2 dias de anticipacion:
A:xxxx
Cc:xxxxx
Asunto: xxxxxx
Cuerpo:
xxxxxxxxxxxx
Me muestra un cartel:
"Error de compilacion
No se ha definido Sub o Function"
y resalta esta parte:
Set mi_App = CreateObjet("Outlook.Application")
que puede ser??
Hola Guillermo,
Revisa que tengas escrita la primera linea Sub...
Saludos.
gracias. me funciona bien. fue de mucha ayuda
Lejos la mejor explicación paso a paso...muchas gracias..funciona perfecto!!!...