como enviar email desde el excel

35
Como enviar Email desde el Excel Un gran amigo "on-line", Johan Moreno, de Colombia, me hizo llegar la inquietud de cómo enviar mails desde Excel. Si bien contaba con algunas líneas de código sobre el particular, decidí retomar mi ejemplo y adaptarlo mejor a las circunstancias. Hace unos minutos termino de remitirle un correo con la solución a Johan... desde Excel y con un archivo adjunto, mismo que transcribo a continuación para ayudar a todos con esta tarea. Veamos primero las dos formas principales de enviar mails: mediante Outlook o nuestro Web Mail (yahoo, gmail, hotmail, etc, etc) No soy usuario de Outlook en lo absoluto: no confío en los agujeros de seguridad que continuamente aparecen y, por otro lado, teniendo a mi alcance una herramienta tan poderosa (y gratuita) como Gmail, la cual ahora también permite sincronizar los mensaje con la Pc para verlos offline (deben activarlo en "google labs")... no creo que me haga usuario ni hoy ni mañana. Igualmente mas adelante daré una solución para aquellos que "no les queda otra", lo cual generalmente se produce por motivos laborales. Empecemos: utilizaremos una cuenta de Gmail para enviar correos electrónicos desde Excel. Si sos usuario de algún otro web mail, simplemente reemplazá los parámetros indicados. Analizando un poco este pequeño proyecto, sería adecuado crear en una hoja o formulario los campos requeridos para que el envío se producza de forma satisfactoria. Hagamos el siguiente diseño:

Upload: ramon-moreno-malave

Post on 25-Jan-2016

64 views

Category:

Documents


4 download

DESCRIPTION

Como Enviar Email Desde El Excel

TRANSCRIPT

Page 1: Como Enviar Email Desde El Excel

Como enviar Email desde el Excel

Un gran amigo "on-line", Johan Moreno, de Colombia, me hizo llegar la inquietud de cómo enviar mails desde Excel. Si bien contaba con algunas líneas de código sobre el particular, decidí retomar mi ejemplo y adaptarlo mejor a las circunstancias. Hace unos minutos termino de remitirle un correo con la solución a Johan... desde Excel y con un archivo adjunto, mismo que transcribo a continuación para ayudar a todos con esta tarea.

Veamos primero las dos formas principales de enviar mails: mediante Outlook o nuestro Web Mail (yahoo, gmail, hotmail, etc, etc) No soy usuario de Outlook en lo absoluto: no confío en los agujeros de seguridad que continuamente aparecen y, por otro lado, teniendo a mi alcance una herramienta tan poderosa (y gratuita) como Gmail, la cual ahora también permite sincronizar los mensaje con la Pc para verlos offline (deben activarlo en "google labs")... no creo que me haga usuario ni hoy ni mañana. Igualmente mas adelante daré una solución para aquellos que "no les queda otra", lo cual generalmente se produce por motivos laborales.

Empecemos: utilizaremos una cuenta de Gmail para enviar correos electrónicos desde Excel. Si sos usuario de algún otro web mail, simplemente reemplazá los parámetros indicados.Analizando un poco este pequeño proyecto, sería adecuado crear en una hoja o formulario los campos requeridos para que el envío se producza de forma satisfactoria. Hagamos el siguiente diseño:

diseñado en una hoja llamada WebMail, a partir de la primer fila. Sencillo. Omito aquí los detalles referentes de la cuenta a traves de la cual enviaremos los correos (gmail, en

este caso), mismos que incorporo dentro del código.

Page 2: Como Enviar Email Desde El Excel

Ya definimos los principales campos, comunes a cualqueir servicio de correo. Abrimos VBA (alt + f11) y antes de escribir el código, debemos referenciar la librería de objetos que nos proporcionará los metodos para hacer factible el envio de mails: Microsoft CDO for Windows 2000 Library (CDO= Colaboration Data Object). Accedemos a esto mediante el menú "Herramientas / Referencias" y del formulario emergente buscamos y seleccionamos la mencionada opcion:

si omitimos este paso... nuestra macro no funcionará. los elementos están ordenados alfabeticamente, por lo tanto nos resultará fácil encontrarlos.

Ahora sí, el código, mismo que se encuentra muy comentado, para facilitar su comprensión:view plain print ?

1. Function EnviarMails_CDO() As Boolean  2.       3. ' Creo la variable de objeto CDO  4. Dim Email As CDO.Message  5. Dim Autentificion As Boolean  6.   7. ' ahora doy vida al objeto  8. Set Email = New CDO.Message  9.   10. 'indicamos los datos del servidor:  11. Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com"  12. Email.Configuration.Fields(cdoSendUsingMethod) = 2  13. 'indicamos el nro de puerto. por defecto es el 25, pero gmail usa el 465. hay otro  14. '(que ahora no recuerdo) pero no me funcionaba... por eso no lo usé mas y lo olvi

dé  15. Email.Configuration.Fields.Item _  16.     ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(4

65)  

Page 3: Como Enviar Email Desde El Excel

17. 'aqui dejamos en claro si el servidor que usamos requiere o nó autentificación.  18. '1=requiere, 0=no requiere. Para gmail, entonces, 1  19. Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/" & _  20.             "configuration/smtpauthenticate") = Abs(1)  21. 'segundos para el tiempo maximo de espera. aconsejo no modificarlo:  22. Email.Configuration.Fields.Item _  23.     ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 

30  24.       25.       26. 'aqui defino como True (verdadera) a la autentificación para el envío de mails.  27. Autentificacion = True  28. 'ahora configuramos las opciones de login de gmail:  29. If Autentificacion Then  30.     'nombre de usuario  31.     Email.Configuration.Fields.Item _  32.         ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "tuusu

[email protected]"  33.     'contraseña  34.     Email.Configuration.Fields.Item _  35.         ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "tucon

traseña"  36.     'si el servidor utiliza SSL (secure socket layer). en gmail: True  37.    Email.Configuration.Fields.Item _  38.         ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True  39. End If  40.       41.     'a partir de ahora tomaremos los datos incluidos en el la hoja de excel:  42.     ' Dirección del Destinatario  43.     Email.To = Trim([e1].Value)  44.       45.     ' Dirección del remitente  46.     Email.From = Trim([e2].Value)  47.       48.     ' Asunto del mensaje  49.     Email.Subject = Trim([e3].Value)  50.       51.     ' Cuerpo del mensaje  52.     Email.TextBody = Trim([e4].Value)  53.       54.     'Ruta del archivo adjunto  55.     If [e5].Value <> vbNullString Then  56.         Email.AddAttachment (Trim([e5].Value))  57.     End If  58.       59.     'antes de enviar actualizamos los datos:  60.     Email.Configuration.Fields.Update  61.     'colocamos un capturador de errores, por las dudas:  62.     On Error Resume Next  63.     'enviamos el mail  

Page 4: Como Enviar Email Desde El Excel

64.     Email.Send  65.     'si el numero de error es 0 (o sea, no existieron errores en el proceso),  66.     'hago que la función retorne Verdadero  67.     If Err.Number = 0 Then  68.        EnviarMails_CDO = True  69.     Else  70.       'caso contrario, muestro un MsgBox con la descripcion y nro de error  71.        MsgBox "Se produjo el siguiente error: " & Err.Description, vbCritical, "Err

or nro " & Err.Number  72.     End If  73.       74.     'destruyo el objeto, para liberar los recursos del sistema  75.     If Not Email Is Nothing Then  76.         Set Email = Nothing  77.     End If  78.     'libero posibles errores  79.     On Error GoTo 0  80. End Function  

'este sub es el que asignaré al botón de la hoja:view plain print ?

1. Sub EnviarMail()  2.     Dim MailExitoso As Boolean  3.     'llamo a la funcion:  4.     MailExitoso = EnviarMails_CDO()  5.     'si me devuelve un resultado Verdadero, todo salió bien:  6.     If MailExitoso = True Then  7.         MsgBox "El mail fué enviado satisfactoriamente", vbInformation, "Informe

"  8.     End If  9. End Sub   

Con lo visto hasta el momento podemos enviar mails sin inconvenientes, aunque solo resta decir que es un ejemplo muy básico y mejorable en extremo. Podríamos crear "listas" de destinatarios y evitar así el ingreso manual de cada uno de ellos. O bien abrir un cuadro de diálogo para seleccionar manualmente el archivo que remitiremos adjunto.Otra opcion muy útil: guardar una determinada hoja (por ejemplo el resumen de venta semanal) como un nuevo libro de excel y enviarla adjunta, sin necesidad de: cerrar excel, abrir el web mail, adjuntar el archivo y enviar, que serían los pasos comunes que debemos realizar.

La automatización puede ser total. Quedo al aguardo de consultas para ampliar el tema.

Page 5: Como Enviar Email Desde El Excel

Etiquetas: Macros

68 comentarios:

Anónimo dijo...

HOLA Amigo solo intento que con este codigo en un archivo de ejemplo y trabaja muy bien, lo que intento es que pueda enviar supongamos la hoja1 y la hoja2 adjunto en un archivo que se agregue automaticamentre al correo...

30 de marzo de 2010 22:29

Damian Omar Silva dijo...

bueno johan, perfecto.me tenés que decir cual de los dos códigos utilizarás (el de outlook o el otro) y vemos como agregar esas dos hojas. fijate que en el ejemplo que te pasé la primer vez, creo un nuevo archivo con las dos hojas y lo adjunto. mirá si te sirve ese forma y avisame

1 de abril de 2010 14:43

Damian Omar Silva dijo...

la solucion al problema planteado por johan fué la siguiente: copio las dos hojas en un nuevo libro, guardo ese nuevo libro con el nombre "ArchivoAdjunto.xls" (o el que le convenga al usuario) y luego lo envío por mail, utilizando el siguiente comando:Email.AddAttachment ("C:\ArchivoAdjunto.xls") obviamente que la ruta puede cambiarse en forma dinámica, según las necesidades de cada uno

7 de abril de 2010 16:57

Anónimo dijo...

Hola,

no me funciona.

usando el puerto 465 me sale el error:"Error -2147220973 The transport failed to connect to the server"usando el puerto 25 me sale el error:"Error -2147220975 The message could not be sent to the SMTP server. The transport error code was 0x80040217. The server response was not available."

sabes que puedo estar pasando?

Page 6: Como Enviar Email Desde El Excel

Muchas gracias!!!

25 de noviembre de 2010 03:33

Damian Omar Silva dijo...

deberías enviarme el archivo la direccion de mail que figura al pié del formulario, así lo pruebo en mi pc y verifico que no tengas algún problema de conexión.pasamelo y vemos como resolverlo. gracias x tu mensaje

27 de noviembre de 2010 10:39

Anónimo dijo...

hhh

17 de octubre de 2011 17:14

Damian Omar Silva dijo...

ahá, gracias x la triple h. (¿¿??)

17 de octubre de 2011 18:12

Anónimo dijo...

Hola. Muchas gracias por el código, funciona perfectamente. Muy bueno.

Saludos,

Ramón.

27 de diciembre de 2011 20:56

Damian Omar Silva dijo...

Muchas gracias Ramón x tu comentario. Un abrazo.

29 de diciembre de 2011 17:15

Anónimo dijo...

hola amigo me urge aprender como usar esta macro; pero con salida desde el outlook, tu crees poder ayudarme

1 de enero de 2012 20:00

Page 7: Como Enviar Email Desde El Excel

Anónimo dijo...

Buenos días excelente BLOG.Seria posible mandar dicho correo y en el campo asunto insertar el contenido de una celda del archivo remitido?Gracias. Feliz AÑO nuevo.

4 de enero de 2012 05:25

Damian Omar Silva dijo...

bueno estimado, me vas a tener que dar un tiempo para levantar la entrada al respecto, así de paso queda el ejemplo en el blog y pueden utilizarlo todos los lectores.

4 de enero de 2012 14:10

Damian Omar Silva dijo...

Es posible. Estimo que la forma mas sencilla es abrir el archivo y almacenar el "asunto" en una variable, cerrar el archivo y enviar el mail.te paso un pequeño código, adaptá la ruta y que celda necesitas leer para que funcione correctamente:

'abro el archivo que anexaré:Workbooks.Open Filename:="C:\ElArchivoQueSea.xls"'aqui guardo el contenido de la celda A2 para usarlo en'el asunto de mailasunto = Range("a2").ValueActiveWindow.Close'y sigue el código para enviar el mail

espero que te sirva, cualquier cosa me avisasgracias x el mensaje

4 de enero de 2012 14:29

Anónimo dijo...

Hola Damian, gracias por tu respuesta, no es exactamente lo que busco. Te paso el código que tengo, de echo es para mandar correos utilizando Outlook, quisiera no tener que abrir el archivo como tu indicas:Sub OutlookMailExcelAdjunto()Dim OutApp As ObjectDim OutMail As Object

Set OutApp = CreateObject("Outlook.Application")OutApp.Session.logon

Page 8: Como Enviar Email Desde El Excel

Set OutMail = OutApp.CreateItem(0)

ActiveWorkbook.Save

On Error Resume NextWith OutMail.To = "".CC = "".BCC = "".Subject = "(que esto haga referencia a una celda del archivo)".Body = "Adjunto a este correo os mando el control de kilometraje e incidencias del vehículo utilizado en mi jornada laboral, recibir un cordial saludo ".Attachments.Add ActiveWorkbook.FullName.SendEnd WithOn Error GoTo 0

Set OutMail = NothingSet OutApp = NothingEnd Sub

5 de enero de 2012 02:30

Anónimo dijo...

Buenas, me funciona perfecto el codigo, lo malo que al momento de mandar el correo, me aparece un cuadro de advertencia que dice sobre un posible virus, al apretar que si me manda el correo en caso contrario obviamente no lo manda, mi consulta es como controlo esto si el codigo esta dentro de un archivo que se ejecutara por tarea programada, no se como controlar esta situacionDe antemano muchas gracias

5 de enero de 2012 09:24

Damian Omar Silva dijo...

Hola estimado. Ahora veo que estás adjuntando el propio archivo desde donde se ejecuta la macro ¿no? Si es así, antes de darle al método Send habría que tomar el "asunto". Supongamos que dicha cadena de texto está en la celda A1:Sub OutlookMailExcelAdjunto()Dim OutApp As ObjectDim OutMail As ObjectDim Asunto as String

Set OutApp = CreateObject("Outlook.Application")OutApp.Session.logonSet OutMail = OutApp.CreateItem(0)

'aqui es donde guardas el libro:

Page 9: Como Enviar Email Desde El Excel

ActiveWorkbook.Save

'y acá comienza el "proceso de envío"'en una variable guardo el contenido de A1Asunto = Range("A1").ValueOn Error Resume NextWith OutMail.To = "".CC = "".BCC = ""'y agregamos la variable:.Subject = Asunto .Body = "Adjunto a este correo os mando el control de kilometraje e incidencias del vehículo utilizado en mi jornada laboral, recibir un cordial saludo ".Attachments.Add ActiveWorkbook.FullName.SendEnd WithOn Error GoTo 0

Set OutMail = NothingSet OutApp = NothingEnd Sub

Fijate si te funciona y me avisas.

5 de enero de 2012 12:57

Damian Omar Silva dijo...

por el tema del aviso sobre el virus me enviaste un correo, te contesto por esa vía (ya que tengo algunas dudas) y luego posteamos aquí la solución.

5 de enero de 2012 12:59

Anónimo dijo...

Formidable Damian, el tema del asunto funciona a la perfección. Muchas gracias.

9 de enero de 2012 02:29

Anónimo dijo...

Hola Damian de nuevo.Para que en el asunto tenga varios valores de varias celdas, que modificación debería realizar??Muchas gracias.

9 de enero de 2012 04:13

Page 10: Como Enviar Email Desde El Excel

Damian Omar Silva dijo...

Hola estimado. Habría que ver cuantas celdas hay en juego. Si son unas pocas, podés concatenar en una variable el contenido de dichas celdas, por ejemplo:Asunto = Range("a1") & " " & Range("a2") & " " _& Range("a3") & ", " & Range("a4")

En "Asunto" quedaran almacenados los valores presentes en los 4 rangos. Fijate que a cada valor lo separo con un espacio y al ultimo, con una coma. Armalo de acuerdo a tus necesidades, ya que es solo de ejemplo y para que veas como se pueden agregar caracteres intermedios.Suerte y cualquier cosa me avisas.

9 de enero de 2012 15:43

jose dijo...

Damian: en primer lugar felicitarte no solo por el contenido sino por la calidad y calidez con la que respondes.La segunda es solicitarte ayuda. Tenemos en un libro de exel cerca de 800 contactos que pertenecen a una institución benefica sin fines de lucro. En dicha lista hay miembros mujeres, hombres, menores de edad, mayores, de distintas provincias, etc. Nosotros enviamos quincenalmente info a miembros de esa lista, dependiendo la edad, lugar de residencia, ect. Esta lista queda exportada a una hoja del mismo libro. La pregunta es, teniendo en cuenta la macro con la que inicias este blog, (con webmail) como podemos hacer para utilizar el rango en donde se encuentran las direcciones de mail como lista de distribución ya que como esta presentado deberíamos ir cargando uno por uno.Disculpa la molestia, es que lo poco que hacemos lo hacemos a pulmon y no tenemos mucha experiencia en macros.Más allá de tu respuesta te agradezco lo que puedas hacer.attejose juan [email protected]

26 de enero de 2012 09:44

Damian Omar Silva dijo...

Jose: hacer lo que necesitas es posible y no requiere de muchos cambios, pero necesitaría que me envíes un ejemplo de la tabla en donde están esas direcciones de correo electrónico, así armo el ejemplo en base a ella.Gracias y quedo a la espera de tus novedades.

27 de enero de 2012 14:41

Anónimo dijo...

Page 11: Como Enviar Email Desde El Excel

Hola Damian muy buenos dias,

Me cayo como anillo al dedo este foro, tengo la siguiente rutina:

Sub DHL()Application.ScreenUpdating = Falseruta = "Z:\Usuarios\Logistica\Supply Chain Management\Material Planning\Conteos Cíclicos\Edgar Ureña\5 Herramientas\Ordenes de Embarque\Ordenes de Embarque DHL"nbre = "Orden de embarque DHL " & Format(Now, "dd-mm-yy hh mm ss")ActiveSheet.CopyApplication.DisplayAlerts = FalseSet wb = ActiveWorkbookOn Error Resume NextWith wb.SaveAs ruta & "\" & nbre & ".xls".Close TrueEnd WithSet wb = NothingApplication.DisplayAlerts = FalseSheets("Hoja1").SelectEnd Sub

Esto corre muy bien, solo que ahora necesito que el libro nuevo que se genera se envie por outlook en ese momento al email [email protected] , creo que es algo tan simple que yo no he podido programar jaja, espero que me puedas ayudar, un abrazo amigo.

Edgar Ureña

[email protected]

28 de enero de 2012 08:40

Damian Omar Silva dijo...

Hola Edgar, gracias x tus palabras.En esta entrada: http://damianexcel.blogspot.com/2012/01/como-enviar-mails-desde-excel-con.htmlexplico como utilizar Outlook a traves de Excel.Podes adaptar ese código a tu proyecto, definiendo:1) dirección de correo ([email protected])2) asunto3) cuerpo del mensaje4) archivo a enviar (que ya lo tienes generado)

Page 12: Como Enviar Email Desde El Excel

si necesitas mas ayuda avisame, que veo como juntas ambos procedimientos y te lo hago llegar x mailUn abrazo

28 de enero de 2012 08:59

Anónimo dijo...

Lo olvidaba, si tambien me pudieras orientar en como indicar en la rutina que el libro que se guarda lleve solo valores para hacerlo mas ligero te lo agradeceré.

Saludos.

Edgar Ureña

[email protected]

28 de enero de 2012 09:00

Damian Omar Silva dijo...

Edgar: con la instrucción Activesheet.copy Excel crea automaticamente otro libro, llevando a éste nuevo todo el contenido de la hoja activa.Saca del procedimiento ese: "Activesheet.Copy"y reemplazalo por esto:'copio todas las celdas del libro activo:Cells.Copy'creo un nuevo libroWorkbooks.Add'y solo pego los valoresCells.PasteSpecial xlPasteValues'quito la seleccion de la copiaApplication.CutCopyMode = False

y que siga el procedimiento, que todo funciona correctamente.cualquier cosa me avisas.un abrazo

28 de enero de 2012 11:45

Anónimo dijo...

Buena tarde Sr. Damián:Internet tiene sinfín de recursos, mas, tras varios años, mi búsqueda para obtener apoyo en código informático, sobre todo para VBA (actualizado) había sido infructuoso.Leyendo las entradas en su foro, me asombro de la amabilidad y sobre todo prontitud con la que trata a sus visitantes.

Page 13: Como Enviar Email Desde El Excel

Esta es la primera página que combina, aparte de la amabilidad y prontitud en la respuesta, información clara y muy útil sobre el tema de Excel que en ninguna otra parte he encontrado, está obsoleta o incompleta.Pronto estaré enviándole mis dudas. Por el momento, aprovecho la ocasión para externarle mis felicitaciones por su utilísimo blog y trato.Jorge GarcíaMérida, México([email protected])

28 de enero de 2012 12:10

Damian Omar Silva dijo...

Jorge: agradezco infinitamente tus palabras, son de gran aliento y apoyo para la tarea que me propuse con el Blog.Mas allá de las entradas básicas que no pueden faltar en todo sitio de Excel que se precie como tal, trato de escribir sobre aquello que me hizo "renegar" mucho hasta encontrarle la "vuelta" y, como vos bien decís, no existe demasiada documentación al respecto; aparte me gusta sacarle el jugo a las "cosas raras" que el mundo de las macros nos pone a nuestro alcance.Intento ser lo menos técnico posible (salvo que algún lector me requiera lo contrario), ya que como leí en un libro de stephen hawking: "-mi editor me alertó que por cada función pierdo el doble de lectores"... jajaja, y es muy cierto.Me pone muy contento poder lograr ese cometido.Gracias y a tus órdenes por cualquier cosa en la que pueda ayudarte.Un abrazo.

28 de enero de 2012 15:41

Anónimo dijo...

Buena noche Sr. Damián:Como comentaba en mi primer mensaje (del cual agradezco su respuesta, muy cierta en su filosofía), aquí va mi primera duda:Probando el código aquí publicado, resulta que comparto el mismo problema que un visitante anónimo envió el 25 de noviembre de 2010 en este foro.Haciendo los cambios en el código del dominio de GMail a Hotmail y del puerto del 465 al 25, se produce el siguiente error: "Error de transporte en la conexión al servidor".Aparentemente ese problema se resolvió aquí, pero no fue publicada la solución. ¿Podría decirme cuál es la solución?Muchas gracias.Jorge Gárcía

29 de enero de 2012 20:25

Damian Omar Silva dijo...

Page 14: Como Enviar Email Desde El Excel

Jorge: la verdad que no recuerdo de que forma solucionamos ese error, muchas veces el intercambio de datos finaliza aquí o bien cerramos el tema mediante correo electrónico.te pediría que por favor me pases el archivo en cuestión al correo que figura al pié del formulario, así lo reviso en "vivo" y desde mi propia PC.un abrazo

30 de enero de 2012 13:17

mmejia1975 dijo...

Buenas, en primera quiero felicitarte por la calidad de tu blog, que ya me ha facilitado un par de ideas. Mi consulta es la siguiente, estoy utilizando el código que posteaste acá para enviar por correo un archivo de excel, pero al momento de envío sale un cuadro de advertencia del Outlook que dice:

"Un programa esta tratando de enviar correo electrónico automáticamente en su nombre. ¿Desea Permitirlo? Si esto es inesperado, puede que sea un virus y debería elegir No"

¿Como puedo evitar que salga esta advertencia?

3 de febrero de 2012 06:31

Damian Omar Silva dijo...

mmejia: gracias x tus palabras sobre el blog.te comento: existen varias soluciones a ese problema, que nace en "opciones/centro de confianza/configurar centro de confianza/acceso mediante programación" de Outlook. Allí no reconoce debidamente al antivirus y se generan los inconvenientes. Seguí la ruta que te indiqué y habilitá la opción respectiva.

si esto no te llegara a funcionar, te brindo dos soluciones que me dieron los propios lectores del blog:1)Damian: la solucion que encontre fue "ClickYes Pro 2010"sacado en su version evaluacion de http://www.contextmagic.com/express-clickyes/ este s/w te elimina el mansaje dandole q sisaludos.

2) luego de la instrucción .Send, escribí lo siguiente:Application.SendKeys "%(r)"Application.SendKeys "%(r)"lo que hace sendkeys es "enviar" la presión de una tecla, en este caso el alt+r.

Page 15: Como Enviar Email Desde El Excel

cualquier cosa avisame. un abrazo.

3 de febrero de 2012 07:04

Anónimo dijo...

Hola Damián, felicidades por tu blog, ha sido de gran ayuda para muchas personas como yo.Tengo una consulta, es posible crear un boton que permita seleccionar la ruta del archivo a adjuntar, sin necesidad de hacerlo de manera manual. Algo como el boton examinar que utilizan muchas web para cargar archivos.Te agradezco de antemano

14 de febrero de 2012 14:15

Damian Omar Silva dijo...

Gracias por tus palabras. En realidad es muy sencillo y se puede lograr llamando a uno de los objetos de Excel: FileDialogs, como te muestro a continuación:Sub SeleccionarArchivo()Dim Fd As FileDialogDim Ruta As String'seteo al objeto y lo muestro:Set Fd = Application.FileDialog(msoFileDialogFilePicker)'dejo seleccionar UN SOLO ARCHIVOFd.AllowMultiSelect = False'si el usuario presionó "aceptar"If Fd.Show = -1 Then'almaceno la ruta del item seleccionadoRuta = Fd.SelectedItems(1)MsgBox RutaEnd If'destruyo al objeto para liberar recursosSet Fd = NothingEnd Sub

en este Sub solo muestro la variable Ruta en un MsgBox (para que veas que funciona correctamente), pero vos podes usar esa variable para otros propósitos, como por ejemplo para anexar el archivo seleccionado al correo electrónico.cualquier duda me avisas. un abrazo

14 de febrero de 2012 16:18

Anónimo dijo...

hola damian!mi pregunta es la siguiente, estoy creando una macro para enviar varios correos a la vez. el problema es que para cada uno de los correos me aparece un cartel de

Page 16: Como Enviar Email Desde El Excel

advertencia del outlook al que le tengo que dar que si para enviar el mensaje. mi pregunta es como saco esa advertencia? y si vos ya lo probaste?

15 de febrero de 2012 09:12

Damian Omar Silva dijo...

Date una vuelta por la entrada que trata el tema de enviar mails desde outlook, allí hay varios comentarios con ese problema (que tiene origen en el centro de seguridad de la aplicación) y un par de soluciones.cualquier cosa me avisas.

15 de febrero de 2012 12:53

Anónimo dijo...

Damian el ejemplo para gmail funciona perfectamente per como poder utilzar tu ejemplo para los correos de hotmail se puede podrias comentarlo gracias

20 de febrero de 2012 12:44

Damian Omar Silva dijo...

Estimado: el ejemplo debería funcionar correctamente con cualquier servidor de correo, sea gmail, hotmail, yahoo, etc, etc.Cada webmail tiene su propio servido smtp y un nro de puerto específico a traves del cual trabaja.Busca en Google "smtp + puertos + hotmail" y vas a encontrar una gran cantidad de información al respecto.En la entrada puse a Gmail como ejemplo por que es el que habitualmente uso, pero configurando esos dos datos que te mencioné podrás manejar cualquier.Gracias x tu mensaje, cualquier duda o problema me avisas

20 de febrero de 2012 15:16

Anónimo dijo...

Hola Damian,he leido con interes la manera rapida y clara en la que nos ayudas (a los novatos).siguiendo el hilo, tengo un problema comunmente envio con una macro multiples correos con adjunto de excel (filtrado por por ejemplo proveedor) sin embargo necesito ahora que el adjunto se incruste dentro del cuerpo del mail y no como un adjunto de excel

21 de febrero de 2012 13:26

Damian Omar Silva dijo...

Page 17: Como Enviar Email Desde El Excel

¿Como seria eso de enviar un adjunto encrustado en el cuerpo del Mail.... y no como adjunto? Explicarme un poco mas por que no entiendo muy bien el planteamiento. Dame un ejemplo asi puedo "procesarlo" bien.Quedo al aguardo de tus noticias.

21 de febrero de 2012 15:37

Jonathan dijo...

disculpe tengo una duda soy algo nuevo en vba, hice una macro q adjuntara un archivo ed excel y lo enviara a un correo de outlook, mi duda es acerca de como adjuntar mas de un archivo, ya que la idea es adjuntar un archivo de excel y uno de word el cual es un resumen de tabla de una hoja de excel, necesito adjuntar los dos archivos y enviarlo al mismo correo

gracias de antemano

22 de febrero de 2012 07:16

Anónimo dijo...

hola, mi duda es, como puedo hacer que los destinatarios los tome de una hoja de excel, digamos que mi lista empieza en A1

22 de febrero de 2012 11:47

Damian Omar Silva dijo...

Hola. Voy a intentar "modularizar" un poco la respuesta. Creo que realizando una función sería lo mejor. Colocá esto dentro del módulo en donde pusiste el código que envía el mail:

Function UnirDestinatarios() As StringDim Destina As StringDim UltFila As Long

'almaceno la ultima fila ocupada de la'columna AUltFila = Cells(Cells.Rows.Count, "A").End(xlUp).Row'y voy recorriendo las celdasFor x = 1 To UltFilaDestina = Destina & Cells(x, "A") _& ", "Next x'ahora quito la última coma:Destina = Left(Destina, Len(Destina) - 2)UnirDestinatarios = DestinaEnd Function

Page 18: Como Enviar Email Desde El Excel

Ahora, dentro del procedimiento que envía el mail, hay que definir una variable (al comienzo)Dim Destinatarios a String

Y antes de asignar las direcciones de correo electrónico, llamamos a la función creada, almacenando en la variable Destinatarios el resultado:Destinatarios = UnirDestinatariosy enviamos:Email.To = Destinatarios

Cada mail va separado por una coma, estimo que te debería funcionar sin problemas. Seguí paso a paso las instrucciones y avisame.

23 de febrero de 2012 15:50

Damian Omar Silva dijo...

Hola Jonathan. Contesto tu pregunta:tenés que colocar la instruccion dos veces (para tu caso) indicando la ruta de ambos archivos.Ejemplo:.Attachments.Add "C:\kesimomayor2.xls".Attachments.Add "C:\ManualKesimoMayor.doc"

como habrás vistos utilizo dos veces la línea.Attachments.Add, en una enviando un xls y en otra un word. De esta forma podrás mandar dos archivos dentro de un mismo correo.cualquier cosa me avisas.

24 de febrero de 2012 14:55

Anónimo dijo...

Hola Damian, Tu blog ESTA MUY CHINGON!!! FELICIDADES.He seguido las dudas de todos y tus respuestas y me ayudo muchisimo, es lo que andaba buscando. La verdad muchas felicidades por tu aportacion.

Solo tengo una duda. Ya logre adjuntar un archivo y se envio sin problema alguno. Pero crees que se pueda incrustar una imagen en JPG o BMP no como archivo adjunto sino que al abrir el correo junto al texto del saludo o del mensaj aparezca la imagen?Por darte un ejemplo: en outlook 2010, redactas un texto en el cuerpo del email, luego en el menu superior te vas a [insertar] ahi seleccionas el icono de [imagen] y de ahi con el explorador buscas y seleccionas la imagen y se incrusta directamente en el cuerpo del email.SaludosFrancisco Hernandez

24 de febrero de 2012 21:24

Page 19: Como Enviar Email Desde El Excel

Damian Omar Silva dijo...

Hola Francisco, gracias por tus palabras.Conozco un método que es el mas sencillo y requiere de muy poco código para funcionar, pero tiene una condición: la imagen debe estar cargada en la web. Estimo que esto hoy en día no supone ningún problema, con todos los servicios gratuitos de almacenamiento que existen.Una vez que tienes dicha imagen solo hay que agregar una línea de código:

Mensaje.HTMLBody = "img src=http://www.joharigautier.com/blog/wp-content/uploads/2011/09/87caribe.jpg /"

Al objeto lo llamo "Mensaje" (reemplazalo por el tuyo) y le aplico la propiead HTMLBody (cuerpo html), colocando un Tag "image", pasando como src la ruta en donde tengo alojada dicha imagen. Cabe destacar que a ese tag le puede agregar todas las propiedades: border, width, etc, etc, como lo haces al crear una página web.suerte y cualquier cosa me avisas.(ojo: a la instrucción le faltan las etiquetas de apertura y cierre de "image" (<>) por que blogger no me deja colocarlas)

25 de febrero de 2012 08:15

Anónimo dijo...

Muy buena tarde Sr. Damián:¿Recibió mi respuesta con respecto a la clave de mi archivo de Excel? Se la envié el mismo dia que lo solicitó?Agradezco nuevamente el interés que demuestra por atender los casos de sus visitantes.

Jorge GarcíaMérida, México

25 de febrero de 2012 09:39

Damian Omar Silva dijo...

Hola Jorge: estuve trabajando con tu archivo, pero aún no doy en la tecla... sigue arrojando error.Pude ver que el servidor smtp está mal: no es "smtp.hotmal.com", sino "smtp.live.com"

pero como te dije, aun tira errores.

si no te funciona cambiando el servidor, te diría que pruebes con enviar el correo mediante outlook, sobre el cual tengo una entrada levantada.si puedo arreglarlo te aviso.

Page 20: Como Enviar Email Desde El Excel

25 de febrero de 2012 14:04

Damian Omar Silva dijo...

Mirá, probando con mis distintas cuentas funcionó sin problemas desde Gmail, o sea que el inconveniente (cosa muy común en Microsoft) se da entre sus productos.Abrí una cuenta en Gmail y cambiá estos parámetros:smtp: smtp.gmail.compuerto: 465

y listo, enviaras correos sin problemas

25 de febrero de 2012 14:08

Anónimo dijo...

Buenas Daniel excelente todos tus trabajos que has expuesto, la verdad que más de uno ya ma han sacado de apuro. Ahora mi consulta es lo siguiente: dispongo de una base de datos donde estan registrados el número de celular, el importe que adeuda y el respectivo nombre del cliente, existe alguna manera que pueda enviar mensajes (sms) desde excel.Saludos desde Paraguay

26 de febrero de 2012 13:15

Damian Omar Silva dijo...

Jaja, que buena pregunta la tuya.Te comento: me parece que tendrás que buscar de que forma puedes enviar, desde Paraguay, sms vía webmail. Si yo tengo, por ejemplo, que disparar un sms al celular 0111556432024 (de Argentina), algunas compañías me permiten hacer lo siguiente:[email protected] verás, es el mismo nro de teléfono, pero sin el 0 del código de área ni el 15 del nro principal. Este mail va directo al celular, haciendo llegar el mensaje que especifiques en el body. Habría que ver como funciona en Paraguay, pero estimo que cambiando algunos detalles debería correr sin problemas.

26 de febrero de 2012 13:36

Salva Shuttle dijo...

¡¡¡Felicidades por tu ayuda, Damián!!!He realizado una hoja de cálculo para llevar el control y facturación de un comedor escolar. Entre otros datos tengo los correos electrónicos del padre y/o madre de cada alumno. Necesito enviar por correo electrónico u resumen mensual a final de mes de la situación contable de cada alumno: menús consumidos, cantidad a pagar...

Page 21: Como Enviar Email Desde El Excel

Todos esos datos los tengo en mi hoja. NO tengo Outlok y utilizo gmail como servidor de correo. ¿Existe alguna macro ya creada que pueda combinar los datos del excel en distintos correos electrónicos para las familias?Cada correo tendrá los datos particulares de cada alumno. Con ello trato de evitar imprimir cerca de 500 folios cada mes...Gracias por tu segura respuesta.

1 de marzo de 2012 13:40

Damian Omar Silva dijo...

Hola Salva, muchas gracias x tus palabras.Necesito que me pases al correo que figura al pié de formulario tu archivo, así analizo la estructura del mismo y de que forma puedo armar el mail para enviarlo. Estimo que es 100% realizable, hice trabajos de ese estilo: tomar datos del registro de una tabla y enviarlo a la dirección de correo que se encuentre en alguno de sus campos.Me gustaría tener ese archivo, por que me resultaría mucho mas fácil y rápido ayudarte, y directamente lo usas, sin necesidad de tener luego que adaptar el código.quedo al aguardo de tus noticias

1 de marzo de 2012 13:49

Manuel Siller dijo...

Hola Damian, tengo un problema con unas macros, una de ellas y es en la que he estado trabajando edita y da formato a un libro con varias hojas, para que despues del codigo en una de dichas hojas (carta), esa hoja seria el cuerpo del email y dentro tambien tiene los datos del destinatario y el subject del correo, me puedes ayudar? si quieres puedo enviarte mi archivo! o darte mi user de team viewer como tu me digas va?

Muchas gracias!

1 de marzo de 2012 15:49

Anónimo dijo...

Hola Damian,

Muy bueno el blog, tenía una consulta y espero que puedas ayudarme.Quiero enviar varias cartas que están en formato word, pero desde varias cuentas de correo.

¿Habría la posibilidad de hacerlo con una macro?

Muchas gracias por tu apoyo y amabilidad puesta en este blog.

Page 22: Como Enviar Email Desde El Excel

André Miranda

2 de marzo de 2012 09:33

Damian Omar Silva dijo...

André: se puede hacer sin problemas, por lo que pude entender. Vos tenes una carta diseñada en word, la cual debe ser "disparada" desde <> cuentas de correo. Lo mejor sería, sin lugar a dudas, que esas cuentas sean de un mismo webmail, como x ejemplo Gmail. Y te nombro el producto de Google x q es el que menos problemas arroja a la hora de trabajar, aunque parezca mentira.Dame un poco mas de detalles, enviandome el proyecto a la casilla de correo que figura al pié del formulario.gracias x tu mensaje

2 de marzo de 2012 15:57

Manuel Siller dijo...

Hola Damian! a que cuenta de correo puedo enviarte mis archivos para que me ayudes con el codigode la macro qe ya hice! se puede?

3 de marzo de 2012 08:56

Damian Omar Silva dijo...

Manuel: figura en el pié del formulario de comentarios. Es una imagen, no la escribo para evitar que los robots la tomen y luego la utilicen para enviarme spam.

3 de marzo de 2012 11:10

Chantal dijo...

Hola Damian, tu blog me ha ayudado mucho sin embargo te tengo una consulta, tengo un archivo de excel con 1000 registros de correos electronicos y otra columna con un #de contrato, a esos correos que se encuentran en el archivo les tengo q adjuntar un archivo de pdf que se guardo con el #de contrato. Me puedes ayudar para poder enviar el correo con el adjunto del # de contrato.

6 de junio de 2012 19:17

Anónimo dijo...

Hola Damian! Gracias por compartir tus conocimientos!

Damian, basandose en este ejemplo, ¿es posible agregar copias ocultas (CCO o BCC)? y de ser posible, ¿se puede automatizar de alguna manera para que al

Page 23: Como Enviar Email Desde El Excel

hacer click, selecionar o usar un checkbox se puedan ir ingresando esas selecciones al campo CCO? (la idea seria enviar el mismo mail a varios destinatarios, pero que estos no vean las direcciones de los demás)

gracias!!!

11 de junio de 2012 04:08

Damian Omar Silva dijo...

si quieres agregar esa característica, solo debes incorporar en el código lo siguiente:Email.Cc = "[email protected]; [email protected]"Email.Bcc = = "[email protected]; [email protected]"

las direcciones de correo van separadas por punto y coma. lo mas conveniente sería que los coloques en una celda y luego hagas referencia a dicha celda para enviarlos:Email.Cc = range("a1").value

16 de junio de 2012 14:49

Damian Omar Silva dijo...

Chantal: dale una mirada a mi nuevo post sobre el envío de mails tomando los datos desde una tabla. creo que apenas modificando ese código podrías adaptarlo a tu proyecto.

16 de junio de 2012 14:51

Anónimo dijo...

Hola Damian, de verdad muchisimas gracias por compartir tus conocimientos, me han servido demasiado.

Estimado, basandose en el ejemplo que expones en este post.¿es posible enviar un mail desde excel, pero que incluya un texto en el cuerpo del mensaje y ademàs incluir una imagen en el mismo cuerpo del mensaje?

aclaro que puedo hacer ambas cosas, pero por separado, al momento de intentar hacer las 2 cosas a la vez, el correo llega solo con la imagen y el texto simplemente desaparece.

Espero que puedas ayudarme.

Atte Gonzalo

18 de junio de 2012 11:35

Page 24: Como Enviar Email Desde El Excel

Damian Omar Silva dijo...

Estimado: la verdad es que utilizando el ejemplo que brindo en el post me llegan ambas cosas: texto e imágenes. No comprendo por que una de ellas te está "fallando" a la hora de enviar los correos.La imagen es un adjunto y el texto parte del cuerpo del mail, deberían llegar ambos sin problemas, ya que son dos propiedades distintas.Pasame el código en donde realizas la tarea que mencionas.

Para el caso de enviar imágenes y texto, del tipo a los boletines de promociones que nos llegan a nuestro correo, yo aconsejo no usar:Email.Bodysino reemplazarlo por otra instrucción:Email.HTMLBodyen donde especificas que envías texto con formato Html. Esto te permitirá crear toda la estructura de una página web dentro del cuerpo del correo. Por ejemplo:BodyHtmlTablefont Hola, que tal /fontimg src=www.aaa.com/imagen.jpg/table/html/body

¿Se entiende? La imagen en cuestión alojada en un servidor cualquier y la incluyes dentro del cuerpo mediante el tag IMG.Cualquier cosa avisame.

18 de junio de 2012 15:30

Anónimo dijo...

Hola Damian, tengo un excel con personas a los que hay que citar. Cada línea corresponde a una persona y a una determinada fecha en que serán citados. Quiero agregar un botón por cada línea para enviar por Outlook la citación con un subject predefinido y en el cuerpo de mensaje un texto, que siempre será el mismo, más un determinado rango de celdas de la misma línea donde está el botón para enviar la citación a esa persona. Gracias por tu ayuda!

19 de junio de 2012 07:25

Damian Omar Silva dijo...

dale una mirada a mi segundo post sobre el tema:http://damianexcel.blogspot.com.ar/2012/06/macros-como-enviar-mails-desde-excel.htmlahí verás como sacar las direcciones de correo electrónico de una tabla de datos,

Page 25: Como Enviar Email Desde El Excel

en donde cada persona es un registro.deberías agregar una columna a esa tabla y (por ejemplo) si dicha celda tiene una "x" a es persona se le dispara el mail.es una buena alternativa y así evitarías colocar tantos botones

20 de junio de 2012 09:54

Anónimo dijo...

Hola Daniel,Tu codigo funciona, genial,Gracias..

pero podrias poner el mismo codigo pero cogiendose los datos de otra hoja excel.

En la hoja1 llamada "Clientes" de mi tabla estan asi las columnas. Hay 525 registros.

A1= paraB1= deC1= asuntoD1= MensajeE1= RUTA ARCHIVO adjunto

1= ¿Como hacer para que se envien los emails automaticamente a todos los registros?.Podrias poner el codigo?.

Gracias Joey

22 de julio de 2012 06:20

Damian Omar Silva dijo...

Joey: date una vuelta por esta entrada:http://damianexcel.blogspot.com.ar/2012/06/macros-como-enviar-mails-desde-excel.html

ahí explico como tomar datos de una tabla y enviar un correo a cada uno de los registros.Solo deberías cambiar de que celda la macro debe leer cada parámetro (para, de, asunto, etc, etc)Es muy fácil de modificar, creo que va justo para lo que necesitas.cualquier cosa me avisas. Gracias x tu mensaje

22 de julio de 2012 11:44

Page 26: Como Enviar Email Desde El Excel

Publicar un comentario en la entrada

<< Siguiente >> Suscribirse a: Enviar comentarios (Atom)

ENTRADAS MAS RECIENTES (ULTIMAS 10)

busqueda recursiva con macros - Jul 20excel 2013 - adelantos - Jul 17cargar rango de celdas a una matriz - Jun 18macros: como enviar mails desde Excel (vba)-segunda parte - Jun 16guardar rango de celdas como imagen jpg - Jun 09quitar la contraseña de una hoja de calculos - Jun 08como empezar a programar macros - Feb 26cargar varias imagenes en una hoja de calculos - Feb 24busqueda multiple en una y todas las hojas - Feb 20autoincremento al guardar archivo de excel - Feb 01O tambien podes visualizar todas las entradas, por categoriaWidget modificado por Damian Omar Silva

las + vistas