Como Enviar Email Desde El Excel
Como Enviar Email Desde El Excel
Como Enviar Email Desde El Excel
diseado 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 cdigo.
si omitimos este paso... nuestra macro no funcionar. los elementos estn ordenados
alfabeticamente, por lo tanto nos resultar fcil encontrarlos.
Ahora s, el cdigo, mismo que se encuentra muy comentado, para facilitar su
comprensin:
view plainprint?
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.
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(4
65)
"configuration/smtpauthenticate") = Abs(1)
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") =
30
24.
25.
26. 'aqui defino como True (verdadera) a la autentificacin para el envo 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.
'contrasea
34.
Email.Configuration.Fields.Item _
35.
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "tucon
trasea"
36.
37.
Email.Configuration.Fields.Item _
38.
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
39. End If
40.
41.
42.
43.
Email.To = Trim([e1].Value)
44.
45.
46.
Email.From = Trim([e2].Value)
47.
48.
49.
Email.Subject = Trim([e3].Value)
50.
51.
52.
Email.TextBody = Trim([e4].Value)
53.
54.
55.
56.
57.
Email.AddAttachment (Trim([e5].Value))
End If
58.
59.
60.
Email.Configuration.Fields.Update
61.
62.
63.
'enviamos el mail
64.
Email.Send
65.
66.
67.
If Err.Number = 0 Then
68.
69.
70.
71.
72.
EnviarMails_CDO = True
Else
'caso contrario, muestro un MsgBox con la descripcion y nro de error
MsgBox "Se produjo el siguiente error: " & Err.Description, vbCritical, "Err
or nro " & Err.Number
End If
73.
74.
75.
76.
77.
End If
78.
79.
On Error GoTo 0
1. Sub EnviarMail()
2.
3.
'llamo a la funcion:
4.
MailExitoso = EnviarMails_CDO()
5.
6.
7.
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 bsico y mejorable en extremo. Podramos crear
"listas" de destinatarios y evitar as el ingreso manual de cada uno de ellos. O bien abrir
un cuadro de dilogo 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 seran los pasos comunes que
debemos realizar.
La automatizacin puede ser total. Quedo al aguardo de consultas para ampliar el tema.
Etiquetas: Macros
68 comentarios:
Annimo 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...
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 envo por mail, utilizando el
siguiente comando:
Email.AddAttachment ("C:\ArchivoAdjunto.xls")
obviamente que la ruta puede cambiarse en forma dinmica, segn las
necesidades de cada uno
7 de abril de 2010 16:57
Annimo 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?
Muchas gracias!!!
25 de noviembre de 2010 03:33
Damian Omar Silva dijo...
hhh
17 de octubre de 2011 17:14
Damian Omar Silva 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
Annimo 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.
Hola estimado. Ahora veo que ests adjuntando el propio archivo desde donde se
ejecuta la macro no? Si es as, antes de darle al mtodo Send habra que tomar
el "asunto". Supongamos que dicha cadena de texto est en la celda A1:
Sub OutlookMailExcelAdjunto()
Dim OutApp As Object
Dim OutMail As Object
Dim Asunto as String
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.logon
Set OutMail = OutApp.CreateItem(0)
'aqui es donde guardas el libro:
ActiveWorkbook.Save
'y ac comienza el "proceso de envo"
'en una variable guardo el contenido de A1
Asunto = Range("A1").Value
On Error Resume Next
With OutMail
.To = ""
.CC = ""
.BCC = ""
'y agregamos la variable:
.Subject = Asunto
.Body = "Adjunto a este correo os mando el control de kilometraje e incidencias
del vehculo utilizado en mi jornada laboral, recibir un cordial saludo "
.Attachments.Add ActiveWorkbook.FullName
.Send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End 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 va
(ya que tengo algunas dudas) y luego posteamos aqu la solucin.
5 de enero de 2012 12:59
Annimo dijo...
Hola estimado. Habra que ver cuantas celdas hay en juego. Si son unas pocas,
pods 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 institucin 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 distribucin ya que como esta presentado
deberamos 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.
Ms all de tu respuesta te agradezco lo que puedas hacer.
atte
jose juan alvarez
[email protected]
26 de enero de 2012 09:44
Damian Omar Silva dijo...
Sub DHL()
Application.ScreenUpdating = False
ruta = "Z:\Usuarios\Logistica\Supply Chain Management\Material
Planning\Conteos Cclicos\Edgar Urea\5 Herramientas\Ordenes de
Embarque\Ordenes de Embarque DHL"
nbre = "Orden de embarque DHL " & Format(Now, "dd-mm-yy hh mm ss")
ActiveSheet.Copy
Application.DisplayAlerts = False
Set wb = ActiveWorkbook
On Error Resume Next
With wb
.SaveAs ruta & "\" & nbre & ".xls"
.Close True
End With
Set wb = Nothing
Application.DisplayAlerts = False
Sheets("Hoja1").Select
End 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
Cells.PasteSpecial xlPasteValues
'quito la seleccion de la copia
Application.CutCopyMode = False
y que siga el procedimiento, que todo funciona correctamente.
cualquier cosa me avisas.
un abrazo
28 de enero de 2012 11:45
Annimo 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 bsicas 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 decs, no existe demasiada
documentacin 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 tcnico posible (salvo que algn lector me requiera lo
contrario), ya que como le en un libro de stephen hawking: "-mi editor me
alert que por cada funcin 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
Annimo dijo...
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 electrnico.
te pedira que por favor me pases el archivo en cuestin 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...
Hola Damin, 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 continuacin:
Sub SeleccionarArchivo()
Dim Fd As FileDialog
Dim Ruta As String
'seteo al objeto y lo muestro:
Set Fd = Application.FileDialog(msoFileDialogFilePicker)
'dejo seleccionar UN SOLO ARCHIVO
Fd.AllowMultiSelect = False
'si el usuario presion "aceptar"
If Fd.Show = -1 Then
'almaceno la ruta del item seleccionado
Ruta = Fd.SelectedItems(1)
MsgBox Ruta
End If
'destruyo al objeto para liberar recursos
Set Fd = Nothing
End 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 propsitos,
como por ejemplo para anexar el archivo seleccionado al correo electrnico.
cualquier duda me avisas. un abrazo
14 de febrero de 2012 16:18
Annimo 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
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 aplicacin) y un par de soluciones.
cualquier cosa me avisas.
15 de febrero de 2012 12:53
Annimo 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...
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...
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
Annimo 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 Jorge: estuve trabajando con tu archivo, pero an 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 dira que pruebes con enviar el correo
mediante outlook, sobre el cual tengo una entrada levantada.
si puedo arreglarlo te aviso.
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 comn en Microsoft) se da entre sus
productos.
Abr una cuenta en Gmail y cambi estos parmetros:
smtp: smtp.gmail.com
puerto: 465
y listo, enviaras correos sin problemas
25 de febrero de 2012 14:08
Annimo dijo...
Buenas Daniel excelente todos tus trabajos que has expuesto, la verdad que ms
de uno ya ma han sacado de apuro. Ahora mi consulta es lo siguiente: dispongo
de una base de datos donde estan registrados el nmero 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...
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
Annimo dijo...
Hola Damian,
Muy bueno el blog, tena una consulta y espero que puedas ayudarme.
Quiero enviar varias cartas que estn en formato word, pero desde varias cuentas
de correo.
Habra la posibilidad de hacerlo con una macro?
Muchas gracias por tu apoyo y amabilidad puesta en este blog.
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 diseada en word, la cual debe ser "disparada" desde <> cuentas de correo.
Lo mejor sera, 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
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...
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
Annimo dijo...
Chantal: dale una mirada a mi nuevo post sobre el envo de mails tomando los
datos desde una tabla. creo que apenas modificando ese cdigo podras adaptarlo
a tu proyecto.
16 de junio de 2012 14:51
Annimo dijo...
/body
Se entiende? La imagen en cuestin 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
Annimo dijo...
Hola Damian, tengo un excel con personas a los que hay que citar. Cada lnea
corresponde a una persona y a una determinada fecha en que sern citados.
Quiero agregar un botn por cada lnea para enviar por Outlook la citacin con
un subject predefinido y en el cuerpo de mensaje un texto, que siempre ser el
mismo, ms un determinado rango de celdas de la misma lnea donde est el
botn para enviar la citacin a esa persona. Gracias por tu ayuda!
19 de junio de 2012 07:25
Damian Omar Silva 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= para
B1= de
C1= asunto
D1= Mensaje
E1= RUTA ARCHIVO adjunto
1= Como hacer para que se envien los emails automaticamente a todos los
registros?.
las + vistas