Sie sind auf Seite 1von 26

Como enviar Email desde el Excel

Un gran amigo "on-line", Johan Moreno, de Colombia, me hizo llegar la inquietud


de cmo enviar mails desde Excel. Si bien contaba con algunas lneas de cdigo sobre
el particular, decid retomar mi ejemplo y adaptarlo mejor a las circunstancias. Hace
unos minutos termino de remitirle un correo con la solucin a Johan... desde Excel y
con un archivo adjunto, mismo que transcribo a continuacin 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 confo 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 tambin permite sincronizar los mensaje con la Pc para verlos offline
(deben activarlo en "google labs")... no creo que me haga usuario ni hoy ni maana.
Igualmente mas adelante dar una solucin para aquellos que "no les queda otra", lo
cual generalmente se produce por motivos laborales.
Empecemos: utilizaremos una cuenta de Gmail para enviar correos electrnicos desde
Excel. Si sos usuario de algn otro web mail, simplemente reemplaz los parmetros
indicados.
Analizando un poco este pequeo proyecto, sera adecuado crear en una hoja o
formulario los campos requeridos para que el envo se producza de forma satisfactoria.
Hagamos el siguiente diseo:

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.

Ya definimos los principales campos, comunes a cualqueir servicio de correo. Abrimos


VBA (alt + f11) y antes de escribir el cdigo, debemos referenciar la librera 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 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.

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)

17. 'aqui dejamos en claro si el servidor que usamos requiere o n autentificacin.


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 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
ario@gmail.com"

33.

'contrasea

34.

Email.Configuration.Fields.Item _

35.

("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "tucon
trasea"

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.

' Direccin del Destinatario

43.

Email.To = Trim([e1].Value)

44.
45.

' Direccin 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.
57.

Email.AddAttachment (Trim([e5].Value))
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

64.

Email.Send

65.

'si el numero de error es 0 (o sea, no existieron errores en el proceso),

66.

'hago que la funcin retorne Verdadero

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.

'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 botn de la hoja:
view plainprint?

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 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...

bueno johan, perfecto.


me tens que decir cual de los dos cdigos utilizars (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 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...

deberas enviarme el archivo la direccion de mail que figura al pi del


formulario, as lo pruebo en mi pc y verifico que no tengas algn problema de
conexin.
pasamelo y vemos como resolverlo. gracias x tu mensaje
27 de noviembre de 2010 10:39
Annimo 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
Annimo dijo...

Hola. Muchas gracias por el cdigo, funciona perfectamente. Muy bueno.


Saludos,
Ramn.
27 de diciembre de 2011 20:56
Damian Omar Silva dijo...

Muchas gracias Ramn x tu comentario. Un abrazo.


29 de diciembre de 2011 17:15
Annimo 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...

Buenos das excelente BLOG.


Seria posible mandar dicho correo y en el campo asunto insertar el contenido de
una celda del archivo remitido?
Gracias. Feliz AO 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 pequeo cdigo, 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 mail
asunto = Range("a2").Value
ActiveWindow.Close
'y sigue el cdigo para enviar el mail
espero que te sirva, cualquier cosa me avisas
gracias x el mensaje
4 de enero de 2012 14:29
Annimo dijo...

Hola Damian, gracias por tu respuesta, no es exactamente lo que busco.


Te paso el cdigo 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 Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.logon
Set OutMail = OutApp.CreateItem(0)
ActiveWorkbook.Save
On Error Resume Next
With 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 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
5 de enero de 2012 02:30
Annimo 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 situacion
De antemano muchas gracias
5 de enero de 2012 09:24
Damian Omar Silva dijo...

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...

Formidable Damian, el tema del asunto funciona a la perfeccin. Muchas


gracias.
9 de enero de 2012 02:29
Annimo dijo...

Hola Damian de nuevo.


Para que en el asunto tenga varios valores de varias celdas, que modificacin
debera realizar??
Muchas gracias.
9 de enero de 2012 04:13
Damian Omar Silva 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
alvarezjo@ufasta.edu.ar
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


necesitara que me enves un ejemplo de la tabla en donde estn esas direcciones
de correo electrnico, as armo el ejemplo en base a ella.
Gracias y quedo a la espera de tus novedades.
27 de enero de 2012 14:41
Annimo dijo...

Hola Damian muy buenos dias,


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

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 x@x.com , creo que es algo tan

simple que yo no he podido programar jaja, espero que me puedas ayudar, un


abrazo amigo.
Edgar Urea
edgar.urena@sas-automotive.com
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-mailsdesde-excel-con.html
explico como utilizar Outlook a traves de Excel.
Podes adaptar ese cdigo a tu proyecto, definiendo:
1) direccin de correo (x@x.com)
2) asunto
3) cuerpo del mensaje
4) archivo a enviar (que ya lo tienes generado)
si necesitas mas ayuda avisame, que veo como juntas ambos procedimientos y te
lo hago llegar x mail
Un abrazo
28 de enero de 2012 08:59
Annimo 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 Urea
edgar.urena@sas-automotive.com
28 de enero de 2012 09:00
Damian Omar Silva dijo...

Edgar: con la instruccin 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 libro
Workbooks.Add
'y solo pego los valores

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...

Buena tarde Sr. Damin:


Internet tiene sinfn de recursos, mas, tras varios aos, mi bsqueda para obtener
apoyo en cdigo informtico, sobre todo para VBA (actualizado) haba sido
infructuoso.
Leyendo las entradas en su foro, me asombro de la amabilidad y sobre todo
prontitud con la que trata a sus visitantes.
Esta es la primera pgina que combina, aparte de la amabilidad y prontitud en la
respuesta, informacin clara y muy til sobre el tema de Excel que en ninguna
otra parte he encontrado, est obsoleta o incompleta.
Pronto estar envindole mis dudas. Por el momento, aprovecho la ocasin para
externarle mis felicitaciones por su utilsimo blog y trato.
Jorge Garca
Mrida, Mxico
(gaej220979@hotmail.com)
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 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...

Buena noche Sr. Damin:


Como comentaba en mi primer mensaje (del cual agradezco su respuesta, muy
cierta en su filosofa), aqu va mi primera duda:
Probando el cdigo aqu publicado, resulta que comparto el mismo problema

que un visitante annimo envi el 25 de noviembre de 2010 en este foro.


Haciendo los cambios en el cdigo del dominio de GMail a Hotmail y del puerto
del 465 al 25, se produce el siguiente error: "Error de transporte en la conexin
al servidor".
Aparentemente ese problema se resolvi aqu, pero no fue publicada la solucin.
Podra decirme cul es la solucin?
Muchas gracias.
Jorge Grca
29 de enero de 2012 20:25
Damian Omar Silva 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...

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 cdigo que posteaste ac para
enviar por correo un archivo de excel, pero al momento de envo sale un cuadro
de advertencia del Outlook que dice:
"Un programa esta tratando de enviar correo electrnico automticamente en su
nombre.
Desea Permitirlo?
Si esto es inesperado, puede que sea un virus y debera 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
programacin" de Outlook. All no reconoce debidamente al antivirus y se
generan los inconvenientes. Segu la ruta que te indiqu y habilit la opcin
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/expressclickyes/


este s/w te elimina el mansaje dandole q si
saludos.
2) luego de la instruccin .Send, escrib lo siguiente:
Application.SendKeys "%(r)"
Application.SendKeys "%(r)"
lo que hace sendkeys es "enviar" la presin de una tecla, en este caso el alt+r.
cualquier cosa avisame. un abrazo.
3 de febrero de 2012 07:04
Annimo 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...

Estimado: el ejemplo debera 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 especfico a
traves del cual trabaja.
Busca en Google "smtp + puertos + hotmail" y vas a encontrar una gran cantidad
de informacin 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 podrs manejar cualquier.
Gracias x tu mensaje, cualquier duda o problema me avisas
20 de febrero de 2012 15:16
Annimo 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...

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
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. Voy a intentar "modularizar" un poco la respuesta. Creo que realizando


una funcin sera lo mejor. Coloc esto dentro del mdulo en donde pusiste el
cdigo que enva el mail:
Function UnirDestinatarios() As String
Dim Destina As String
Dim UltFila As Long
'almaceno la ultima fila ocupada de la
'columna A
UltFila = Cells(Cells.Rows.Count, "A").End(xlUp).Row
'y voy recorriendo las celdas
For x = 1 To UltFila
Destina = Destina & Cells(x, "A") _
& ", "
Next x
'ahora quito la ltima coma:
Destina = Left(Destina, Len(Destina) - 2)
UnirDestinatarios = Destina
End Function
Ahora, dentro del procedimiento que enva el mail, hay que definir una variable
(al comienzo)
Dim Destinatarios a String

Y antes de asignar las direcciones de correo electrnico, llamamos a la funcin


creada, almacenando en la variable Destinatarios el resultado:
Destinatarios = UnirDestinatarios
y enviamos:
Email.To = Destinatarios
Cada mail va separado por una coma, estimo que te debera 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:


tens 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 habrs vistos utilizo dos veces la lnea
.Attachments.Add, en una enviando un xls y en otra un word. De esta forma
podrs mandar dos archivos dentro de un mismo correo.
cualquier cosa me avisas.
24 de febrero de 2012 14:55
Annimo 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.
Saludos
Francisco Hernandez
24 de febrero de 2012 21:24
Damian Omar Silva dijo...

Hola Francisco, gracias por tus palabras.


Conozco un mtodo que es el mas sencillo y requiere de muy poco cdigo para
funcionar, pero tiene una condicin: la imagen debe estar cargada en la web.
Estimo que esto hoy en da no supone ningn problema, con todos los servicios

gratuitos de almacenamiento que existen.


Una vez que tienes dicha imagen solo hay que agregar una lnea de cdigo:
Mensaje.HTMLBody = "img src=http://www.joharigautier.com/blog/wpcontent/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
pgina web.
suerte y cualquier cosa me avisas.
(ojo: a la instruccin le faltan las etiquetas de apertura y cierre de "image" (<>)
por que blogger no me deja colocarlas)
25 de febrero de 2012 08:15
Annimo dijo...

Muy buena tarde Sr. Damin:


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 inters que demuestra por atender los casos de sus
visitantes.
Jorge Garca
Mrida, Mxico
25 de febrero de 2012 09:39
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...

Jaja, que buena pregunta la tuya.


Te comento: me parece que tendrs que buscar de que forma puedes enviar,
desde Paraguay, sms va webmail. Si yo tengo, por ejemplo, que disparar un sms
al celular 0111556432024 (de Argentina), algunas compaas me permiten hacer
lo siguiente:
1156432024@sms.algomas.com.ar
Como vers, es el mismo nro de telfono, pero sin el 0 del cdigo de rea ni el
15 del nro principal. Este mail va directo al celular, haciendo llegar el mensaje
que especifiques en el body. Habra que ver como funciona en Paraguay, pero
estimo que cambiando algunos detalles debera correr sin problemas.
26 de febrero de 2012 13:36
Salva Shuttle dijo...

Felicidades por tu ayuda, Damin!!!


He realizado una hoja de clculo para llevar el control y facturacin de un
comedor escolar. Entre otros datos tengo los correos electrnicos del padre y/o
madre de cada alumno.
Necesito enviar por correo electrnico u resumen mensual a final de mes de la
situacin contable de cada alumno: mens consumidos, cantidad a pagar... 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 electrnicos 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 direccin de correo que se encuentre en
alguno de sus campos.
Me gustara tener ese archivo, por que me resultara mucho mas fcil y rpido
ayudarte, y directamente lo usas, sin necesidad de tener luego que adaptar el
cdigo.
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
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

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
Annimo 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
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 dems)
gracias!!!
11 de junio de 2012 04:08
Damian Omar Silva dijo...

si quieres agregar esa caracterstica, solo debes incorporar en el cdigo lo


siguiente:
Email.Cc = "usuario1@xxx.com; usuario2@xxx.com"
Email.Bcc = = "usuario3@xxx.com; usuario4@xxx.com"
las direcciones de correo van separadas por punto y coma. lo mas conveniente
sera 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 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...

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
adems 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
Damian Omar Silva dijo...

Estimado: la verdad es que utilizando el ejemplo que brindo en el post me llegan


ambas cosas: texto e imgenes. 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, deberan llegar
ambos sin problemas, ya que son dos propiedades distintas.
Pasame el cdigo en donde realizas la tarea que mencionas.
Para el caso de enviar imgenes y texto, del tipo a los boletines de promociones
que nos llegan a nuestro correo, yo aconsejo no usar:
Email.Body
sino reemplazarlo por otra instruccin:
Email.HTMLBody
en donde especificas que envas texto con formato Html. Esto te permitir crear
toda la estructura de una pgina web dentro del cuerpo del correo. Por ejemplo:
Body
Html
Table
font Hola, que tal /font
img src=www.aaa.com/imagen.jpg
/table
/html

/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...

dale una mirada a mi segundo post sobre el tema:


http://damianexcel.blogspot.com.ar/2012/06/macros-como-enviar-mails-desdeexcel.html
ah vers como sacar las direcciones de correo electrnico de una tabla de datos,
en donde cada persona es un registro.
deberas 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 evitaras colocar tantos botones
20 de junio de 2012 09:54
Annimo 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?.

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-desdeexcel.html
ah explico como tomar datos de una tabla y enviar un correo a cada uno de los
registros.
Solo deberas cambiar de que celda la macro debe leer cada parmetro (para, de,
asunto, etc, etc)
Es muy fcil 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
Publicar un comentario en la entrada
<< Siguiente >>
Suscribirse a: Enviar comentarios (Atom)
ENTRADAS MAS RECIENTES (ULTIMAS 10)
busqueda recursiva con macros - Jul 20
excel 2013 - adelantos - Jul 17
cargar rango de celdas a una matriz - Jun 18
macros: como enviar mails desde Excel (vba)-segunda parte - Jun 16
guardar rango de celdas como imagen jpg - Jun 09
quitar la contrasea de una hoja de calculos - Jun 08
como empezar a programar macros - Feb 26
cargar varias imagenes en una hoja de calculos - Feb 24
busqueda multiple en una y todas las hojas - Feb 20
autoincremento al guardar archivo de excel - Feb 01
O tambien podes visualizar todas las entradas, por categoria
Widget modificado por Damian Omar Silva

las + vistas

Das könnte Ihnen auch gefallen