Hojas de cálculo en Excel - página principal

Enviar un email desde Excel

Hace ya un tiempo, en forosdelweb.com, un usuario preguntaba si era posible enviar un email desde nuestra aplicación Excel. Otro usuario le contestaba que sí, que se podía hacer, y le remitía a una página web en inglés, donde se explicaba paso a paso, como llevar a cabo esta operación.

Como hace solo unos pocos días, otro usuario volvió a preguntar sobre el tema en ese mismo foro, se me despertó la curiosidad, y me puse a mirar aquella web en inglés, y a la que en su día no le había prestado mucha atención. La web en cuestión era esta: http://www.rondebruin.nl/sendmail.htm.

Allí hay abundante información sobre como enviar un email desde Excel (la documentación está en inglés), y hay ejemplos de cómo adjunta un archivo, como mandar una copia del email a otro usuario, etc. Yo me limitaré a hacer lo más sencillo, que no es otra cosa que enviar un email de texto, haciendo algunas adaptaciones muy sencillas al código original, para facilitar la entrada de datos por parte del usuario. Solo necesitaremos estos 6 datos:

  • La cuenta de correo desde la que vamos a mandar nuestro email: Este dato lo informaremos directamente en el código fuente del macro.

  • El password de nuestra cuenta de correo: Este dato lo informaremos directamente en el código fuente del macro.

  • El nombre y cuenta de correo, para el "reply": Este dato lo informaremos directamente en el código fuente del macro.

  • La cuenta de correo del destinatario: Este dato lo informaremos a través de un UserForm.

  • El asunto del email: Este dato lo informaremos a través de un UserForm.

  • El cuerpo del mensaje (el mensaje en sí): Este dato lo informaremos a través de un UserForm.

Como veis, hay 3 datos que siempre serán fijos, y son nuestra cuenta de correo, el password, y el nombre más el email (esto va junto, así que lo consideraremos como un solo dato), por si contesta o hace un "reply" el usuario. Los otros 3 datos que son variables, los introduciremos a través de un UserForm, es decir, informaremos del email del destinatario, el asunto del email, y

Vamos a enviar un email utilizando el servicio de correo electrónico de Google, es decir, el servicio de su aplicación Gmail. Podemos utilizar una cuenta de Yahoo, Hotmail, o cualquier otra, pero el correo de Gmail, es en mi opinión el mejor de todos. Si utilizáis otro servicio de correo, habrá que cambiar el servidor de correo saliente smtp, cambiando en el código fuente, la línea correspondiente (el código que veréis en este ejemplo, está debidamente comentado).

Lo primero que haremos será crear un macro desde el que llamaremos al UserForm. Tan sencillo, como hacer esto:

Sub Enviar_email()
'llamamos al userform1
UserForm1.Show
End Sub

El UserForm constará de 4 etiquetas de texto o Label (Label1, Label2, Label3, y Label4), 3 cuadros de texto o TextBox (TextBox1, TextBox2, TextBox3), y un botón de comando o CommandButton, tal y como podéis ver en la siguiente imagen:


Cuando diseñéis el UserForm, al situaros encima del TextBox3, que es el del cuerpo del mensaje, fijaos que en las propiedades (ventana de la izquierda), habéis cambiado EnterKeyBehavior a true, y MultiLine también a true, para que cuando usemos la tecla intro en el cuerpo del mensaje, bajemos a la línea siguiente, y para que cuando escribamos un email largo, automáticamente salte de línea al llegar al final por la derecha. Debéis cambiarlo, para que quede como en la siguiente imagen (ver lo marcado en color rojo atenuado):


El botón de comando (ese que pone "Enviar el email"), tendrá este código:

Private Sub CommandButton1_Click()
'Si hay errores, que continúe
On Error Resume Next
'Creamos el Message y Configuration, para
'enviar emails a través del objeto CDO de Windows

Set oMsg = CreateObject("CDO.Message")
Set oConf = CreateObject("CDO.Configuration")
'Cargamos los valores por defecto
oConf.Load -1
'Configuramos el objeto CDO, con los datos
'de nuestra cuenta de correo

Set Flds = oConf.Fields
With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
'ponemos nuestra cuenta de correo de GMAIL
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "mi_email@gmail.com"
'ponemos nuestro password de GMAIL
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "mi_password"
'este es el smtp de GMAIL. Si usamos Hotmail, yahoo, o cualquier otro
'servicio de correo, deberemos configurar el smtp, y evidentemente
'también el nombre de usuario y el password para esa cuenta

.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
.Update
End With
'recogemos el mensaje del TextBox3 del Userform
mensaje = TextBox3
With oMsg
Set .Configuration = oConf
'ponemos el nombre y correo para el reply
.From = """mi_nombre"" <mi_email@gmail.com>"
'recogemos el resto de datos del Userform,
'es decir, el destinatario y el asunto del mensaje

.To = TextBox1
.Subject = TextBox2
.TextBody = mensaje
.Send
End With
'Mostramos un mensaje, tanto si hay
'errores como si no los hay

If Err <> 0 Then
MsgBox ("Se ha producido un error, y no se ha podido enviar el email.")
Else
MsgBox ("El email se ha enviado correctamente.")
End If
End Sub

Cuando tengáis todo listo, tan solo deberéis llamar al macro Enviar_email(), para que os presente un formulario como este, para poder enviar un correo electrónico desde nuestra aplicación Excel:


Como ya sabéis, este macro podéis guardarlo en nuestro libro personal de Excel, para poder utilizarlo desde cualquier hoja de cálculo.

Desde aquí podéis descargar el fichero, con el ejemplo que hemos visto en este artículo.



51 comentarios:

ElProfe dijo...

Apreciado Javier Marco:

Definitivamente pones unos puntos muy muy altos!

Excelente aporte el tuyo y funciona de maravilla; lo práctico que resulta, el tiempo que se ahorra y lo fácil de usar! que mas habría que pedir?

Abrazos desde Colombia y gracias por compartir tu conocimiento.

Saludos,

Juan M. Beltrán V.
ElProfe

Javier Resendiz dijo...

Hola, Javier Marco:

Primero que nada un enorme agradecimiento por todo lo que he aprendido con lo que nos compartes.

Por otra lado, la solución que presentas en este post es parte de lo que ando buscando. De hecho, lo que pretendo ni siquiera sé si sea posible.

Te explico:

La idea es que, desde un formulario, después de oprimir el correspondiente botón de comando, una macro se encargue de imprimir en formato PDF una hoja "X" del libro xls, recoger los datos de mensaje (estático), contacto y destino (variables) desde sus celdas de origen y, una vez hecho esto, mandar el correo electrónico junto con la impresión PDF como archivo adjunto.

Si es posible lo anterior, quizá podríamos rizar más el rizo:

Hacer que, aparte de lo mencionado, se encargue de ir creando un registro en otra hoja, con los datos de fecha, hoja X y contacto, cada vez que se realiza un envío exitoso.

Ya tú me dirás si vuelo demasiado alto en mis aspiraciones, o si lo que planteo es pan comido y cosa de todos los días.

Te dejo mis saludos y un fuerte abrazo.

Javier Reséndiz

Anónimo dijo...

Hola
En esta pagina he encontrado muchos temas interesantes para desarrollar mis conocimientos de excel, por cierto bastante limitados; la considero muy buena para novicios en esto como yo.
en este caso yo tengo una cuenta de mixmail y me gustaria saber como puedo conseguir el smtp de mixmail para poderlo poner en la macro de este caso.

muchas gracias

El pilt®afilla - www.3piesalgato.com dijo...

Prueba con este: smtp.mixmail.com

Anónimo dijo...

Hola de nuevo, Javier , he probado con smtp.mixmail.com y no me funciona. No se si estaré haciendo algo mal. He utilizado tu archivo y solo he modificado mi direccion de correo y la contraseña y he colocado en su linea el smtp que me habias dicho y me sale el mensaje de "que no ha podido enviarse". A ver si me puedes ayudar por que esta aplicacion me parece muy util y muy interesante. Gracias

El pilt®afilla - www.3piesalgato.com dijo...

No todos los servicios de correo web, permiten el uso de pop3, por ejemplo para pinchar esos correos en tu outlook, o en tu outlook express.

Por lo que parece, mixmail, no lo permite, con lo que no podrás utilizar esa cuenta para enviar emails. Lo he leído en este listado: http://xyberneticos.com/index.php/2007/03/22/recopilacion-de-servicios-de-mail-gratuitos/

Anónimo dijo...

Hola Javier. Pues siento no poder utilizar esa macro por tener el correo en mixmail, porque
realmente era muy practica.
Te agradezco , de todas maneras, el interes y la rapidez de tus contestaciones.
Para intentar hacer algo parecido a esta macro aunque menos practico, habia pensado en hacer
otra macro, en una hoja de excel, asociada a un boton.La macro haria las siguientes acciones:
1-abrir el internet explorer. 2-conectar con la pagina web del correo ( mixmail, por ejemplo)
3- escribir el nombre del correo y la contraseña en la pagina anteriormente abierta.
4-entrar en el correo.De tal manera que al pulsar el boton asociado, inmediatamente despues
pudiesemos ver o escribir e-mails en nuestro correo.
He intentado hacer la macro utilizando "shell" y "sendkeys" pero realmente estoy teniendo
muchos problemas y no me sale el resultado esperado, sobre todo con sendkeys al introducir el
nombre y la contraseña.no se si habrá otra manera de introducirlos ¿ me podrias ayudar?
Creo que podría ser interesante para los que no podemos utilizar tu macro original


Gracias

El pilt®afilla - www.3piesalgato.com dijo...

Creo que lo que pretendes, es bastante complicado. ¿No es más fácil redirigir el correo de mixmail a otro cliente de correo (ej. gmail)?. Seguro que mixmail permite esa opción. De esa forma, te pinchas el correo en tu outlook, o en tu cliente de correo electrónico, y listo.

Digo que es complicado porque hacer una llamada a la función Shell, o usar la instrucción SendKeys, se me antoja imposible. Más que nada porque el ámbito de esas funciones e instrucciones, es la aplicación que las ejecuta, en este caso Excel. Tú lo que pretendes, es que se escriba un dato, fuera de la aplicación excel, y directamente sobre la página web de destino. Sinceramente, no tengo ni idea de como hacer eso.

gabrielakaty@hotmail.com dijo...

Hola Javier como estas por favor necesito que me ayudes.....

Necesito ayuda urgente tengo un archivo de excel compratido en red con 6 computadoras y una de las columnas me da las horas y tiempos automaticamente cuando se escribe en una celda (todo eso funciona a la perfeccion) pero el problema que tengo es que hay una computadora que cuando se abre el archivo y se le da actualizar no pone la hora exacta que ya todas las otras 5 tiene porque coloca automaticamente la hora en que se abrio el archivo.... please HELLLLPPP por que pasa esto??? sera falta de sincronicacion de horas en la red??? como hago

Anónimo dijo...

Hola, le quería realizar una consulta.
Ando realizando un programa sobre la planificación deportiva en deportes de resistencia, especialmente el atletismo.
Básicamente en lo que estoy trabajando y me sugiere muchas dudas, es en crear un calendario que al pinchar en un día determinado genere una plantilla (tipo formulario, ya que un formulario de excel no permite crear varios submenus, por ejemplo calentamiento 20:00,series 3x1000,series 3x500, y asi con más casos), para introducir los datos sobre el entrenamiento. Después el programa debería juntar todos los días del entrenamiento de la semana solo cogiendo unos determinados datos y que no aparezcan los días que no se entrenase , después con una tabla dinámica se verían las estadísticas de toda la semana.
Si se pudiera conseguir no estaria de mas poder introducir anotaciones en calendario para orientarte en la planificación
Muchas Gracias

Anónimo dijo...

y al reves seria posible?
me explico, recibo email todos iguales pero variando los datos

nombre de usuario XXXX
rmail YYYY
direccion ZZZZ
telf. SSSSS

seria posible extraer los datos a una hoja de excel en forma de tabla?

quizas sea imposible de hacer y pido demasiado, ya me contaran

saludos y agradecido por tan estupendo blog, me sirve de mucha ayuda

Anónimo dijo...

Javier
Muy bueno tu blog.
En cuanto enviar mail te cuento que lo arme en hotmail y anda impecable, ahora pretendo que en el cuerpo del mail pueda enviar un rango de excel automaticamente y en el TexBox solo se puede escribir.
Mil Gracias y ojala puedas ayudarme
Saludos
Marcelo

Anónimo dijo...

Private Sub Label1_Click()
Private Sub CommandButton1_Click()
On Error Resume Next
Set oMsg = CreateObject("CDO.Message")
Set oConf = CreateObject("CDO.Configuration")
oConf.Load -1
Set Flds = oConf.Fields
With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
XXXXX
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "mi_email@gmail.com"
XXXXX
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "mi_password"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
.Update
End With
mensaje = TextBox3
With oMsg
Set .Configuration = oConf
.From = """Facundo Alvarez"" "
.To = TextBox1
.Subject = TextBox2
.TextBody = mensaje
.Send
End With
If Err <> 0 Then
MsgBox ("Se ha producido un error, y no se ha podido enviar el email.")
Else
MsgBox ("El email se ha enviado correctamente.")
End If
End Sub

Private Sub TextBox1_Change()

End Sub


Esta bien asi? por que me tira Error de Compilacion, Se esperaba "End Sub" mucho de visual nose, si me pueden ayudar gracias =)

El pilt®afilla - www.3piesalgato.com dijo...

En la web del autor original de este script, tienes un ejemplo: http://www.rondebruin.nl/cdo.htm

Si te fijas, al final de todo, en el apartado donde pone "Changing the To line" el autor ha creado una variable llamada "strto", para enviarla a continuación con el ".to", en lugar de enviar un textbox.

Espero que te sirva de ayuda.
Un saludo.

Anónimo dijo...

Javier
Gracias por ocuparte!! no me explique bien en la pregunta anterior... lo que estoy intentando es que en el mensaje me traiga un formulario echo en una hoja excell (rango: A1:C20)con el formato que tiene....hoy lo estoy usando copiando y pegando e intento automatizarlo directamente desde excell con tu "enviar mail". Es una orden de compra que en mi trabajo pude armar gracias a lo que pude aprender de tu blog y combinando algunos de tus ejemplos, hoy tengo un libro de excell que tiene un UserForm que me carga datos en otra hoja con formato imprimible y me guarda los datos en una fila numerada, la planilla de carga de datos tiene Listas desplegables y Buscar para agilizar el armado y luego la macro da la orden de guardar la fila de control, imprimir una orden numerada y luego vacia todo para empezar de nuevo, solo me falta enviar ese formato que arme para imprimir por mail..(lo estoy haciendo copiando y pegando).

Mil gracias
Marcelo

El pilt®afilla - www.3piesalgato.com dijo...

En el enlace de mi mensaje anterior, hay un ejemplo para enviar por email un rango de celdas de Excel. Creo que era eso lo que buscabas...

En cualquier caso, te sugiero que visites la web esa, que allí encontrarás todo lo relativo al envío de datos desde Excel, por correo electrónico.

Un saludo.

Daniel Calderón dijo...

Estimado Javier Marco
Gracias a tu blog he aprendido muchas cosas sobre el excel.
Especialmente utilizo este ejemplo para enviar correos desde excel pero solo lo he logrado hacer con cuerpo del mensaje y quisiera saber si me puedes ayudar a enviar una hoja como datos adjunto.
Revisé por la web y encontre una que si me permite enviar la hoja como dato adjunto pero el problema es que sale una ventanita diciendo que si esta seguro de enviar bla,bla,bla en cambio con tu macro no sale esa pantalla y por eso quisiera que me heches una ayudita
http://www.rondebruin.nl/mail/folder1/mail2.htm
esta es la página con la macro que te comenté
Un saludo

ChileTributa dijo...

Javier: Gracias por compartir, esto ayuda en verdad.

Recien lo he visto, lo baje y probe.

genial,
ha funcionado a la primera.

¿que consideraciones debiese tener si deseo copiar en formato plano una tabla dinámica en el cuerpo del mensaje del correo?

Gracias.

Ignacio.

ChileTributa dijo...

Hola javier: estoy en la tarea de poder leer y escribir desde una planilla excel a una base de datos PostGreSQL. ¿conoces algun link que haga referencia a tal cosa?

Cuando me funcione prometo compartirlo en este espacio.

Gracias.
Ignacio.

El pilt®afilla - www.3piesalgato.com dijo...

Pues la verdad es que lo desconozco. En este blog tienes varios ejemplos de lectura desde una BD Access, a Excel. Si quieres saber las cadenas de conexión, pásate por: http://www.connectionstrings.com/postgre-sql

Saludos.

Anónimo dijo...

saludos desde colombia
primero que todo excelente tu blog y este punto de enviar email por excel mejor aun quiero pedirte un favor dime como puedo hacer si te es posible quiero enviar mi email pero q los destinatarios aparezcan en la opcion de copia oculta para q no salga aquello de a que tantas personas les he enviado correo

graciass por tu atencion LAMS

El pilt®afilla - www.3piesalgato.com dijo...

Prueba a sustituir esta línea:

.To = TextBox1

Por esta otra:

.BCC = TextBox1

Salu2

Anónimo dijo...

Javier muchas gracias por tu pronta colaboracion ya lo probe y parece que las cosas funcionaron super bien es posible colocarle color al texto del mensaje?

perdona la preguntadera cuidate mucho y gracis por tu colaboracion

LAMS

Anónimo dijo...

HOLA
JAVIER

tengo una pregunta mas que hacerte, resulta que los destinatarios de el correo son varios 150 para ser exactos y los tengo en una hoja de excel separados por puntos y comas en una columna y 150 filas mi pregunta es como hago mi boton de comando para poder traer esos nombres de excel al cuadro de texto de los destinatarios, lo unico que tengo que me funciona es el recorrido de cada fila pero solo me copia el primero de ahi no pasa mas pero el recorrido si lo hace uno por uno cuando le doy enter, este es el codigo q utlizo

TextBox1.Text = Sheets("correos").Range("a1").Value
ActiveCell.Offset(1, 0).Activate

gracias por tu colaboracion

El pilt®afilla - www.3piesalgato.com dijo...

Creo que lo que buscas es algo como esto que contesté hace un año, en forosdelweb.com:

http://www.forosdelweb.com/f90/consulta-sobre-lista-excel-732538/

Saludos.

Anónimo dijo...

bien javier eres excelente en esto te agradezco mucho la verdad ya me estaba haciendo a la idea de copiar y pegar ajajaj, mi pregunta es has probado enviar el texto del mensaje con colores? no en cada linea sino en todo el texto aunq sea
se lo agradeceria mucho si me pudiera sacar de la duda.

LAMS

Anónimo dijo...

javier tengo un problema con un archivo de excel, en una de las hojas tengo un listado en columnas y tengo una macro que los pasa a filas el problema es q no me permite ejecutar una por una la instruccion y necesito que cuando copie un dato me deje en la otra hoja llenar mas informacion imprimirla y seguir con el otro dato, le adjunto lo q tengo a ver si usted me puede ayudar gracias de antemano

con esto copio todo de una vez pero no puedo acceder dato a adato
Application.ScreenUpdating = False
Sheets("listado").Select
Range("a2").Select
bandera = False
For i = 1 To 10
If ActiveCell <> "" Then
Worksheets("llenar formato").Range("d5").Value = ActiveCell.Value
Worksheets("llenar formato").Range("d6").Value = ActiveCell.Offset(0, 1).Value
Worksheets("llenar formato").Range("d7").Value = ActiveCell.Offset(0, 2).Value
Sheets("LLENAR FORMATO").Select
ActiveCell.Offset(1, 0).Select

y lo necesito de la siguiente forma

NOMBRE DEL ARRENDADOR sonia
DIRECCION d5
NIT 221
TOTAL Q.

se q lo hace pero me deja el ulltimo arrendador digitado y no me muestra los demas y necesito q me vaya mostrando uno por uno para agregar informacion y detalles de la factura y q luego pueda imprimirlo y seguir con el segundo
gracias
LAMS

animoid dijo...

Hola Javier.

Estaba buscando precisamente información acerca de este tema y se me antoja lo más parecido a lo que busco.

Sin embargo mi problema es automatizar el envío del email con un boton, extrayendo parte del texto desde ciertos valores de unas celdas determinadas, no de toda la hoja.

Además, el destinatario del email cambiará en función del valor de una celda, que representa el destinatario.

Muchas gracias por compartir tu conocimiento. Eres todo un ejemplo.

Salu2
Jose Sanchez

Unknown dijo...

Holoa amigo:
Despuies de leer estos post, sobre el envio de email desde excel, te comento mi problema.
Tengo una hoja de excel enla cual estas todos los cumpleaños de mis amigos y cionocidos, me gustaria que en el dia de su cumpleaños se emitiese un correo felecitando a alos amigos.
Es posible hacerlo.
Un saludo

Anónimo dijo...

Buenas.

Lo primero, enhorabuena por este excelente blog. Recién descubrí el potencial de excel y entré a buscar información avanzada, y esto es lo mejor que he visto hasta el momento.

Una duda que te será muy simple de resolver pero que no he encontrado cuando revisaba el blog. Cuando envío un e-mail ¿puedo adjuntar un documento? Imagino que es tan fácil como añadir al envío del ejemplo una instrucción con la ruta del documento pero desconozco cuál sería la instrucción.

Muchas gracias!

El pilt®afilla - www.3piesalgato.com dijo...

Al principio del artículo, hay un enlace a la web del autor original de esta idea. Allí hay ejemplos sobre como enviar por email, un rango de celdas, una hoja, o incluso un libro entero.

Saludos.

Ricardo dijo...

Cómo puedo mandar un e-mail desde mi cuenta de hotmail? ya cambié la dirección, el password y el smtp server a smtp.live.com, pero aún así me da error.

El pilt®afilla - www.3piesalgato.com dijo...

Prueba a cambiar el puerto 465 que es el que utiliza Gmail, por el 25, en esta línea de código:

.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465

Saludos.

Anónimo dijo...

Hola, implemente el codigo y anda de maravilla pero al ejecutarlo en un pc que tiene su servicio de internet a través de un proxy este no lo envia, configure el proxy para con el host destino: smtp.... y el puerto pero aun asi no anda .. alguna idea??????

Anónimo dijo...

Hola Javier Marco

Primero que todo debo agradecerte por compartir tu conocimiento y ayudar a los que no tenemos mucha experiencia en todo esto
que es la programación.

Sólo quiero hacer una pregunta y me gustaría saber solo si es posible o no.
Se puede adjuntar un archivo al mail que se manda desde excel y si se puede programar para que se mande solo a cierta hora?

ojalá puedas responder (solo si es posible y que tan complejo sería)
un Saludo !!

El pilt®afilla - www.3piesalgato.com dijo...

Hola. Respecto a tu primera pregunta, sí, se puede, pero tendrás que echarle un vistazo a la web a la que le he puesto un enlace al principio de este artículo: http://www.rondebruin.nl/sendmail.htm, pues allí hay bastantes ejemplos (enviar solo un rango de celdas, solo una hoja, el libro entero, etc).

A la segunda parte, te respondo con este artículo: ejecutar una macro a una hora determinada.

Saludos.

Anónimo dijo...

Hola javier. Por lo visto la tenes clara por eso recurro a vos para ver si me podes ayudar. Estoy trabajando con excel y quiero enviar un rango de ese excel por mail (microsoft outlook)en formato pdf a una cuenta que figura dentro de ese rango. Agradeceria tu ayuda. sdecurnex@alpesbroker.com.ar

Angel Andre dijo...

Hola Javier.
Me ha servido bastante este código, muchas gracias.
Lo que sí, prentendo poder adjuntar un archivo, pero no he podido hacerlo. En la web he encontrado que se hace con '.Attachments.Add' , pero al parecer ese se usa cuando trabajas con Outlook. Quisiera saber cómo lo puedo hacer para poder adjuntar un archivo según tu código.

El pilt®afilla - www.3piesalgato.com dijo...

En la web que puse al principio, creo que hay multitud de ejemplos de envío de ficheros, de envío del libro, de envío de 1 hoja, de envío de un rango de celdas, etc.

Saludos.

José Juan Alvarez dijo...

Disculpe la molestia. No soy muy bueno en esto de las macros, pero baje la suya y funciona muy bien. Desde ya gracias.
Ahora bien, el tema es que esto lo estamos usando en una entidad de bien público y semanalmente mandamos mails con las novedades. La pregunta es si se le puede agregar un código a su macro para que automaticamente me traiga por ejemplo el rango T1:T621 que es donde tenemos registradas las direcciones de mail.
Muchas gracias
jose juan alvarez

El pilt®afilla - www.3piesalgato.com dijo...

José Juan, deberás investigar un poco (y aprender macros, también), pero para hacértelo más fácil, el código que te devuelve el arreglo de la lista de emails para enviar, lo puedes sacar de este hilo de forosdelweb donde lo expliqué un día (yo soy el usuario 3pies):

http://www.forosdelweb.com/f90/consulta-sobre-lista-excel-732538/

Saludos.

Anónimo dijo...

Ayudenme para incluir en este codigo un archivo adjunto de excel o mejor aun la hoja activa de excel, pero por GMAIL porque desde outlook no me sirve. Gracias

Hipterion3000 dijo...

Muchas Gracias, con una pequeña modificacion lo pude usar desde una hoja de calculo sin controles. Al final lo util estuvo en el tiempo que me ahorre enviando 80 mensajes en menos de 4 minutos

AthoS_Ros dijo...

Esto es muy bueno, funciona de 1°.
Ahora lo que necesito es que me envie algunos registros que estan en celdas simples, no en textbox. las celdas tienen nombres asignados como si fueran variales.

Puedo hacer que al enviar el correo me cargue estos datos en el cuerpo del mensaje??

Gracias por los aportes... muy bueno

guetpu dijo...

Hola Javier Marco
Ante todo mis mejores deseos de felicidad para este 2012.

Inserto mi consulta en este post, porque puede servir como paso previo al desarrollo final.

Con la siguiente macro tengo varias hojas que las guardo directamente en formato PDF

Sub ImpresPDF()
'
' ImpPDF Macro
'
'aqui agregamos la variable, y en la parte de Filename checa como agrego la variable

nombre = Range("J8").Value

Range("A1:J48").Select
Range("J48").Activate
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Practiques\" & nombre & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
End Sub

Con ello, en la carpeta que aqui denomino "Practiques", se guarda directamente un pdf por cada cambio en la celda J8

De tal forma que, si J8 = fra12001 ó fra12002 ó fra12003 en la carpeta Practiques se guardan TRES pdf, uno para fra12001, otro para fra12002 y otro para fra12003

Hasta aqui todo bien, pero ahora me gustaria poder mejorar la macro para que me guarde los PDF directamente en mi Dropbox.

He cambiado la ruta de archivo por

"C:\Usuaris\Amad\Dropbox\PRACTIQUES\" & nombre & ".pdf", _

pero NO.....

Me da error y se destaca en amarillo la siguiente parte de la macro

Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Usuaris\Amad\Dropbox\PRACTIQUES\" & nombre & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False

Creo que la macro en si misma es de mucha utilidad y te agradeceria si pudieses ayudarme a depurarla para guardar directamente en Dropbox

Feliz Año
guetpu

Paty dijo...

Buenas Tarde. Una consulta he creado una macro que me permite enviar un archivo adjunto al presionar un Botón. Lo que quisiera es que uno de los cuadros del archivo adjunto se pegue en el cuerpo del correo. Es decir al presionar el bóton Enviar, debe adjuntarse el archivo y que en el cuerpo del correo se pegue un cuadro que esta en unas de las hojas del archivo adjunto.

Agradeceré mucho su ayuda,

Saludos,
Melania

Anónimo dijo...

seria posible mandar una lista de la hoja es decir se tiene un inventario y solo se quiere enviar el encabezado de la lsita y sus datos sea cual sea la cantidad de linesas que hayan seria posible ? como se haria?sle

Anónimo dijo...

estimados estoy haciendo una plataforma para una sicologa en excell con macros y quiere enviar los datos al correo , estioy configurando los textbox son 5 cajas en total mas el formulario de envio . como podria tomar esos datos de los textbox y al momento de escrivir en el formulario enviar toda la info me entienden .

REYMOND dijo...

Amigo soy caballero pero solo dos palabras engrosan mi agradecimiento

TE AMOOOOOOOOOOOOOO
gracias por el aporte sobre todo que me das el archivo

david velasco dijo...

Hola Javier

muchas gracias por todos tus aportes que nos das en tu pagina, la verdad son magnificos, quisiera ver si me puedes apoyar con esta duda:
deseo enviar email adjuntando el libro activo, el destinatario es fijo y la macro debe de pedirme el remitente (puede ser gmail, hotmail yahoo, etc)?

Anónimo dijo...

Excelente tu blog, muchas gracias.

Ahora una duda... y si lo que quiero es leer mi cuenta de correos de g-mail?

Y en función de algún criterio bajarme un documento adjunto, y borrar el mensaje original?

Gracias nuevamente,

Fabián