Regresar a la Pagina de Inicio

28 de mar. de 2010

macros: como enviar mails desde Excel (vba)

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.


[+/-] Ver el resto / Ocultar

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

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

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

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?

Muchas gracias!!!

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

Anónimo dijo...

hhh

Damian Omar Silva dijo...

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

Anónimo dijo...

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

Saludos,

Ramón.

Damian Omar Silva dijo...

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

Anónimo dijo...

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

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.

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.

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 mail
asunto = Range("a2").Value
ActiveWindow.Close
'y sigue el código para enviar el mail

espero que te sirva, cualquier cosa me avisas
gracias x el mensaje

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 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 vehículo 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

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 situacion
De antemano muchas gracias

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 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 envío"
'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 vehículo 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.

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.

Anónimo dijo...

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

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.

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.

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.
atte
jose juan alvarez
alvarezjo@ufasta.edu.ar

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.

Anónimo 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 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.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 Ureña

edgar.urena@sas-automotive.com

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.html
explico como utilizar Outlook a traves de Excel.
Podes adaptar ese código a tu proyecto, definiendo:
1) dirección 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

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

edgar.urena@sas-automotive.com

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

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.
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ía
Mérida, México
(gaej220979@hotmail.com)

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.

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

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

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?

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

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.

cualquier cosa avisame. un abrazo.

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

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 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 propósitos, como por ejemplo para anexar el archivo seleccionado al correo electrónico.
cualquier duda me avisas. un abrazo

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

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.

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

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

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

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.

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

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

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 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 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 = UnirDestinatarios
y 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.

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.

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.
Saludos
Francisco Hernandez

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)

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ía
Mérida, México

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.

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.com
puerto: 465

y listo, enviaras correos sin problemas

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

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:
1156432024@sms.algomas.com.ar
Como 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.

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

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

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!

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.

André Miranda

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

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?

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.

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.

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

Damian Omar Silva dijo...

si quieres agregar esa característica, solo debes incorporar en el código 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 sería que los coloques en una celda y luego hagas referencia a dicha celda para enviarlos:
Email.Cc = range("a1").value

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.

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

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.Body
sino reemplazarlo por otra instrucción:
Email.HTMLBody
en 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:
Body
Html
Table
font Hola, que tal /font
img 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.

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!

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.html
ahí verás como sacar las direcciones de correo electrónico de una tabla de datos, 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

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

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

YOM dijo...

Hola Damian, excelentes tus aportaciones...me han despejado muchas de las dudas que tenía..Mil gracias por el apoyo.

Anónimo dijo...

Excel ente!!!!!!!!!!!!1

Publicar un comentario en la entrada

Regresar a la Pagina de Inicio

ENTRADAS MAS RECIENTES (ULTIMAS 10)


las + vistas

10 ULTIMOS COMENTARIOS DE MIS LECTORES

Free counters!
blog de periodismo




GRAFICA RIO BRAVO
Serigrafia-Offset
Rosario - Santa Fe - Argentina
TE: 0341 4664028