Una opción ya en desuso de Excel es el envío a destinatario de correo, que permite adjuntar un rango de celdas seleccionado en el cuerpo de un email, gestionado todo desde nuestra aplicación Excel favorita.
Para las últimas versiones deberemos sacar a la luz el enterrado botón que habilita esta posibilidad;
así pues desde el desplegable de la barra de herramientas de acceso rápido > Más comandos... > Todos los comandos > Enviar a destinatario de correo
Una vez sacado el botón, podemos ejecutarlo, lo que nos llevará a la siguiente ventana... desde donde controlaremos el destinatario/s, el asunto o una breve introducción (en sustitución del típico cuerpo de un email).
Accediendo a Outlook podremos comprobar el envío de dicho email:
Este mismo proceso lo podemos replicar desde nuestra programación y así poder automatizarlo...
Así pues añadimos la siguiente macro dentro de un módulo estándar de nuestro proyecto de VB:
Al ejecutarlo verificaremos que el resultado es equivalente...
Para las últimas versiones deberemos sacar a la luz el enterrado botón que habilita esta posibilidad;
así pues desde el desplegable de la barra de herramientas de acceso rápido > Más comandos... > Todos los comandos > Enviar a destinatario de correo
Una vez sacado el botón, podemos ejecutarlo, lo que nos llevará a la siguiente ventana... desde donde controlaremos el destinatario/s, el asunto o una breve introducción (en sustitución del típico cuerpo de un email).
Accediendo a Outlook podremos comprobar el envío de dicho email:
Este mismo proceso lo podemos replicar desde nuestra programación y así poder automatizarlo...
Así pues añadimos la siguiente macro dentro de un módulo estándar de nuestro proyecto de VB:
Sub Enviar_Rango_a_Destinatario_de_correo() 'Seleccionamos el rango de celdas a enviar Select ActiveSheet.Range("A1:B5").Select ' Show the envelope on the ActiveWorkbook. ActiveWorkbook.EnvelopeVisible = True 'Llamamos al envío... With ActiveSheet.MailEnvelope .Item.To = "excelforo@excelforo.com" '.Item.cc = "cursos@excelforo.com" 'con copia a... '.Item.bcc = "consultoria@excelforo.com" 'con copia oculta a... .Item.Subject = "Asunto: Envío rango de Excel por email" .Introduction = "Ejemplo de rango adjunto con formato..." .Item.Send End With End Sub
Al ejecutarlo verificaremos que el resultado es equivalente...
Muchas gracias por esta entrada Ismael! Estoy intentando ejecutar esta macro pero me da el siguiente error: "class does not support Automation or does not support expected interface". El código falla en la línea "With ActiveSheet.MailEnvelope".
ResponderEliminarMe gustaría utilizar esta función de Excel "envío a destinatario de correo" automatizando los correos a adjuntar así como el asunto.
Espero que me puedas echar una mano. Gracias!
Hola!
Eliminar¿¿??, no sabría decirte con certeza
¿con qué versión de Excel trabajas?...
Saludos
Excel 2013
EliminarPues no hay ningún motivo para el fallo..salvo que tengas alguna librería/referencias como FALTA.
EliminarEntra en el editor de VB > menú Herramientas > REferencias y busca si hubiera alguna marcada como FALTA o cualquier otra cosa 'rara'
Es lo único que ahora mismo se me ocurre
Saludos y suerte!
Funciona de lujo y a la primera, solo que teneis un correo mio por el error. ;)
EliminarLe estoy modificando para que pueda serme útil, pero a funcionado genial. Gracias por el aporte.
:DD
Eliminarsi, me llegan muchos por no quitar mi dirección
;-)
Un saludo
Y cual seria el codigo para poder adjuntar una imagen adjunta
EliminarHola, qué tal?
Eliminarun placer saludarte igualmente...
Puedes usar la propiedad
.Attachments.Add Ruta_de_la_imagen
Puedes ver un ejemplo de doc adjunto en
https://excelforo.blogspot.com/2015/09/vba-adjuntar-hoja-activa-como-pdf-al.html
Slds
hola gracias por la pronta respuesta, pero me gustaría usar el código en el cual se adjunta un rango de celdas y sumado pueda enviar una imagen; tomando la ubicación del archivo alojado en una celda, creeme he intentado varias cosas y logro agregar el codigo correcto a tu ejemploe.
EliminarSub Enviar_Rango_a_Destinatario_de_correo()
02
03
'Seleccionamos el rango de celdas a enviar Select
04
ActiveSheet.Range("A1:B5").Select
05
06
' Show the envelope on the ActiveWorkbook.
07
ActiveWorkbook.EnvelopeVisible = True
08
09
'Llamamos al envío...
10
With ActiveSheet.MailEnvelope
11
.Item.To = "excelforo@excelforo.com"
12
'.Item.cc = "cursos@excelforo.com" 'con copia a...
13
'.Item.bcc = "consultoria@excelforo.com" 'con copia oculta a...
14
.Item.Subject = "Asunto: Envío rango de Excel por email"
15
.Introduction = "Ejemplo de rango adjunto con formato..."
16
.Item.Send
17
End With
18
End Sub
Se trata de juntar ambas macros..
EliminarEn todo caso ya he comprobado que lo has conseguido, por que me ha llegado un email con la imagen y el rango ajdunto...
Saludos
Hola Ismael, te he enviado como 10 adjuntos jajajaja, una pregunta, tendras el codigo para aparte de enviar el rango, se adjunte ese mismo workbook? yo tengo uno, lo puse pero no funciono.
ResponderEliminar*Attachments.Add ActiveWorkbook.FullName
No se que codigo usar para adjuntar el archivo tambien,
Nita: Me funciono muy bien el codigo.
Gracias!!
Hola Ulises
Eliminar:DD
en realidad 31 :DD (estoy acostumbrado.. diariamente me llegan unos pocos)
Pues en realidad te debería funcionar...
prueba con paréntesis
.Attachments.Add (ActiveWorkbook.FullName)
Saludos
Buenos días,
ResponderEliminartengo una macro que envia el correo automaticamente.
pero necesitaria lo siguiente:
tengo varias ventas en una hoja de excel y necesitaria que en la misma macro se agruparan las ventas por cliente y luego se le enviaran todas juntas como body del email
un ejemplo:
Juan realizo 4 compras
Roberto 10
Andres 3
y las tengo todas ordenadas por fecha.
necesitaria que la macro ordenara por cliente y luego hiciese algun tipo de loop, si tengo un cliente cliente con una sola venta enviar correo, luego seguir hasta el proximo cliente si tiene 2 ventas enviar correo con dos ventas y asi hasta que se termine por completo de verificar todos los campos seria posible?
saludso
Hola,
Eliminarclaro... todo es posible ;-)
Pero cuál es la duda concreta que evita que sigas???
Slds
Hola yo tengo una duda :/ si quisiera que la macro solamente me copiara el rango seleccionado , pero me lo dejará sin enviar, cómo seria? es decir, primero selecciona el rango, copia y después pega la imagen en el cuerpo de un correo y quue hasta ahí se detenga, me ayudan :(
ResponderEliminarHola Manuel
Eliminarsolo quita la línea 16 del código
donde dice:
.Item.Send
Saludos
Hola he estado intentando resolverlo, pero me sale el siguiente recuadro :
Eliminar" Se ha producido el error '-2147319779(8002801d)' en tiempo de ejecución:
Interfaz no compatible
Ese es el mensaje que me sale, y el código que usé fue el siguiente :
Sub Correo()
ActiveSheet.Range("C16:L32").Select
ActiveWorkbook.EnvelopeVisible = True
With ActiveSheet.MailEnvelope
.Item.to = ""
.Item.Subject = ""
.Introduction = ""
End With
End Sub
Lo resolví utilizando un on error goto , pero amm ahora tengo otra duda jaja como supongamos que el usuario no quiere enviar el correo, que le dio click por accidente , hay alguna manera de cerrarlo? sin necesidad de darle click en enviar?
EliminarHola MAnel
Eliminarno entiendo.... te refieres una vez enviado el email???
Hola Ismael
ResponderEliminarIntento enviar un rango que no se encuentra en la hoja principal. He conseguido hacerlo pero de vez en cuando me da "Error en el método Select de la classe Range.
Adjunto lo que he hecho:
Sub Enviar_correo_a_Roser()
Sheets("roser").Range("a1:G9").Select
ActiveWorkbook.EnvelopeVisible = True
With Sheets("roser").MailEnvelope
.Item.To = "mmmmmmm@gmail.com"
.Item.Subject = "Asunto: Tens un missatge..."
.Introduction = "Trucades de telèfon"
.Item.Send
End With
End Sub
Hola!
Eliminarmuy raro... entiendo siempre existe la hoja 'roser' ??
Prueba a separarlo en dos líneas
Sheets("roser").select
Range("a1:G9").Select
quizá así funcione mejor...
Slds
Hola Ismael,
ResponderEliminarCómo podría hacer para que seleccione dos rangos, pero necesito que uno de ellos sea predeterminado, ya que es donde van los títulos, y el rango otro rango no lo sea, sino que tome el rango que tengo seleccionado actualmente en la hoja activa.
Gracias desde ya.
Hola Victor,
Eliminarel problema de este método es que siempre envía lo seleccionado de la hoja activa...
Para otras opciones habría que usar otros métodos de envío.. básicamente consistiría en crear un libro nuevo con el rango copiado y adjunto al email...
:(
No muy práctico pero...
Saludos
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola Ismael,
ResponderEliminarEstoy intentando usar el codigo que nos compartiste, pero me aparece el siguiente error:
Method 'MailEnvelope' of object '_Worksheet' failed
Sabes cual podria ser la razon?
Hola Dorothy,
Eliminareste es un método que sigue siendo válido hoy día... y funciona sobre la hoja activa Activesheet...
No sabría darte una respuesta alternativa a lo expuesto en otros comentarios.
Saludos
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola, me ocurre igual que a Dorothy. Pongo lo siguiente
ResponderEliminarActiveSheet.Range("C16:L32").Select
ActiveWorkbook.EnvelopeVisible = True
With ActiveSheet.MailEnvelope
.Item.to = ""
.Item.Subject = ""
.Introduction = " "
.Item.Send
End With
End Sub
Y me sale lo siguiente:
Method 'MailEnvelope' of object '_Worksheet' failed
Esto solo me ocurre cuando utilizo un ordenador con la versión de Excel y Outlook 2013, si lo ejecuto en otro con la 2010 no le da ningún problema. He revisado la referencias que tiene activas uno y otro y son las mismas.
Si me pudierais ayudar, os lo agradecería :)
Hola Ángela,
Eliminarhe probado, por si acaso, con versiones 2010,2013 y 2016 y funciona bien
Algo obvio, ¿Tenéis cuenta de email en Outlook activa?
Envíame el fichero a
excelforo@gmail.com
y lo reviso.. algo os está pasando ¿¿??
Saludos
Hice unas modificaciones. Al igual que uno de los comentarios de arriba necesito algo más complicado. En una hoja de Excel tengo todas las facturas de mis clientes pendientes de pago. Un cliente me debe 1 factura, otro me debe 30. Lo que intento hacer )con buscarv, indice y coincidir) que en la hoja resumen se pongan todas las facturas de cierto cliente y luego mandar un rago de filas que para el cliente de una sola factura, llevará una larga sección de celdas en vacío.
ResponderEliminarCuando finalmente tenía todo configurado, intento ejecutar la macro, y todo aparentemente funciona, pero al entrar a las cuentas de correo (que yo sí tuve la precaución de cambiar) no aparece nada.
¿Alguna idea?
Hola!
Eliminarte refieres que al ir a Enviados de tu Oulook no ves lo enviado??
Tendría que ver el fichero o la macro para verificar.. pero si no te salta ningún error es complicado darte una explicación
...
Gracias
Estimado en la parte de ActiveWorkbook.EnvelopeVisible = True me da error y en el depurador me aparece como que el valor otorgado es false antes me funcionaba mi Excel es 2016
ResponderEliminarHola!
Eliminarsolo puedo referirte a comentarios previos de hace pocos días...
A fecha de hoy, en versiones 2010,2013 y 2016 sigue funcionando (al menos a mí) con W10.
Slds
tengo una duda, nesesito que se mande masivamente a vasios correos como puedo integrar una seleccion de celdas donde esten los correos.
ResponderEliminarsaludos
Hola qué tal?
Eliminarpuedes aplicar un bucle que recorra el rango con los distintos correos y sustituir la variable en .Item.To
....
for each destino in range("A1:A10")
With ActiveSheet.MailEnvelope
.Item.To = destino
....
next destino
suponiendo que en A1:A10 tienes los correos.. debería funcionar
Saludos
Buenos días estimado. Espero se encuentre bien.
ResponderEliminarAntes que nada, debo agradecerle el valioso aporte que hizo con este video.
En mi caso funciona de maravilla, pero le quería preguntar.
¿Como puedo hader, para que dicho correo pueda ser editado por el destinatario?
Esta consulta es debido a que en mi caso yo envió registros a los cuales le faltan datos. Los cuales son suministrados por un cliente.
Desde YA MUY AGRADECIDO
Hola, buen día.
ResponderEliminarLa opción "Enviar a destinatario de correo" me aperece en gris en excel, no puedo seleccionarla pese a que la agregué ¿Sabes qué puede ser el problema?
Mil graias!
Hola!
Eliminarquizá tengas una celda editada o seleccionado algún objeto...
De momento la utilidad sigue siendo operativo.
Lo acabo de comprobar por si acaso
Saludos
Tengo el mismo problema agrego el boton pero no me lo deja usar, entiendo que tiene que ver con la configuracion de correo
EliminarPodría tener con la configuración de Outlook (¿?), en mi caso no tengo nada especial en ésta, y funciona en diferentes versiones
EliminarSlds
Hola!!
ResponderEliminarNo se si me puedes ayudar requiero enviar correos con dos o mas destinatarios en cc pero de la forma en que la tengo programado solo me trae uno solo y no ambos.
.To = FILTRO_REPORTE_CORREO
.Cc = FILTRO_REPORTE_CORREO1
.Cc = FILTRO_REPORTE_CORREO2
Saludos
Hola!
Eliminarpodrías concatenar ambos correos
.CC=email1 & ";" & email2
debería funcionarte
Saludos
Hola Ismael!
ResponderEliminarte consulto, en mi outlook tengo configurada más de una cuenta,
con que código especifico de cual quiero que se envíe el correo?
muchas gracias!
saludos
Hola Jorge,
Eliminarla próxima semana publico al respecto...
;-)
Saludos cordiales
Buen día, gracias por el Video. Tengo un problema, ya que corre la macro sin niguna interrupción pero no se envía ningún correo. Tengo abierta la sesión en Excel pero sale un error en el icono minimizado de Outlook "otro programa esta usando outlook". Agradecería cualquiera ayuda. Saludos Lo probé también en otro pc y sale igual.
ResponderEliminarHola,
Eliminarsolo se me ocurre que trates de enviarlo empleando el botón estándar de Excel para enviar un rango adjunto (sin macros) y ver lo que ocurre...
En principio no debería fallarte
Quedo atento
Slds