Regresar a la Pagina de Inicio

5 ene. 2012

como enviar mails desde excel con outlook

Estimo que el título de la entrada es bastante descriptivo, no necesita mayores explicaciones. Dado mi post anterior (link) he recibido en los últimos días varias consultas sobre realizar esta tarea utilizando a Microsoft Outlook como "intermediario". La tarea no es complicada y a la vez resulta sencilla de adaptar a cualquier proyecto, por cuanto estimo les será de ayuda en su trabajo diario. Gracias a los mensajes y códigos que me hicieron llegar, mismos que usaré en la presente entrada.
[+/-] Ver el resto / Ocultar

19 comentarios:

Vicente dijo...

Buenas noches.

Estupenda macro. Mi duda consiste en que no necesito enviar el libro completo sino una hoja del mismo. ¿Cuál sería la instrucción?

Muchas gracias.

Damian Omar Silva dijo...

Vicente: gracias por tus palabras. La cuestión es: ir hasta la hoja, copiarla y "guardarla como...", para luego anexar ese nuevo libro al mail: Suponiendo que hablamos de la hoja2:
Sheets("hoja2").Select
ActiveSheet.Copy
ActiveWorkbook.SaveAs "C:\FileSent.xls"

y listo, luego al attachment le darías esa ruta:
C:\FileSent.xls, o la que hayas asignado en tu proyecto.

suerte y cualquier cosa me avisas.
saludos

Vicente dijo...

Buenas tardes Damián.

Muchas gracias por tu ayuda.

Un saludo

Damian Omar Silva dijo...

De nada Vicente, cualquier cosa me avisas.
Un abrazo.

Rebeca dijo...

Lo primero muchas gracias por esta macro me sirvió de gran ayuda, pero me ha surgido una duda y no se si es posible porque soy principiante en esto de las macros. Me gustaría que la macro hiciera que el mail se configurara pero no se llegara a enviar, es decir, para enviarlo tendríamos que ir al outlook y en el mail que se ha creado dar al botón de enviar,¿me podéis ayudar? Se me ocurre cambiar la instrucción "send" por otra, pero he probado varias y no funciona. Ahh y otra cuestión ¿se puede insertar una imagen en el cuerpo del mensaje? No lo he conseguido. Muchas gracias.

Damian Omar Silva dijo...

estimo que lo del cuerpo del mensaje se puede hacer configurándolo desde el propio Outlook: proba colocando una imagen de fondo por defecto (para todos los correos, como plantilla) y luego usa Excel para enviarlos.
En cuanto a "guardar" el correo antes de enviarlo... sería mas fácil usar directamente Outlook, aunque quizás pueda hacer algo al respecto. Dejame ver y te aviso, es probable que pueda crearlo, abrir outlook, mostrarte la pantalla y no enviarlo. No lo intenté nunca, voy a ver si funciona. Gracias x tu mensaje, en breve te estoy respondiendo.

Damian Omar Silva dijo...

Rebeca: reemplazando el método .Send (enviar) por .Save (guardar) te deja el correo en la "bandeja de borradores". Luego te vas a outlook (o bien ya lo tienes abierto) y puedes visualizarlo antes del envío.
Probá de esa forma y avisame, aquí funciona sin problemas.

Lorena dijo...

Buenos días Damian, creo q soy muy principiante en esto de las macros para Excel, me gustaría q me ayudarás la forma en q puedo ejecutar tú código, copio y pego en una macro ejecuto? necesito crear un libro asi como tú lo hiciste? Q hago¿? Disculpame mis preguntas tan principiantes, pero me interesa mucho la macro xq quiero hacer eso con un archivo q tengo.

Damian Omar Silva dijo...

Con Alt+F11 ingresas al editor de Vba, y luego vas al menú insertar/modulo.
Ahi dentro pegas el codigo del ejemplo. Ojo: fijate que cuando "armo" el Mail, tomo algunos valores de rangos presentes en las hojas, no olvides modificar esa parte, adaptandola a tu libro.

Marisol dijo...

Hola!
es posible crear una macro para que se envie un mail de aviso a una dirección concreta de Outlook cuando alguien modifique un libro en que tengo guardado en red???
Si es posible me podria ayudar con la macro?
Gracias!

Damian Omar Silva dijo...

Marisol: estimo que ese libro debería contener la macro que "dispara" el correo si alguien lo abre, en el evento Workbook_Open().
¿De que tipo de red estamos hablando? ¿Es una simple punto a punto o una con servidor y su respectivo administrador?
quedo al aguardo de tus noticias.

Anónimo dijo...

Damian te felcito por compartir tus conocimientos,Gracias de antemano Soy Antonio, y quiero hacerte la siguiente consulta, soy principiante y quiero hace una macro para enviar los correos sobre una lista de distribucion es decir tengo un archivo en donde enlisto el nombre del archivo y la direccion de correo a la que debe enviarse, que debo hacer?

Damian Omar Silva dijo...

Gracias Antonio.
Envíame el archivo a mi correo, asi veo la estructura de la tabla y puedo ayudarte sobre tu proyecto, no termino de comprender muy bien tu consulta.
Quedo al aguardo de tus noticias.

daniel dijo...

hola Damian muchas gracias por tu info me sirvio muchisimo, sobre lo que comentaba alguien por ahi para poder visualizar el correo antes de enviarlo, solo es de sustituir .Send por .Display , de esa manera le funcionara :D

Damian Omar Silva dijo...

Gracias Daniel, mas que bueno el aporte. Le habia recomendado a Rebeca que utilice .Save, ya que con ese método lo dejaba en la bandeja de borradores. No conocía el .Display que propones en tu comentario. Excelente, un abrazo y gracias de nuevo.

Anyel dijo...

Muy buena Macro.Pero no corre con Outlook Express
Damian necesitaba un poco de ayuda con lo siguiente:
Estoy intentando hacer una macro que corra con el Outlook Express y, después de investigar algo he conseguido enviar mails a las direcciones que pongo (hago que corra por las filas según el número de correos que haya en la página) y a cada uno le envía un mensaje automático. Sólo me faltan por solucionar 2 cosillas. Una (la más importante y donde ando perdido) cómo adjuntar un archivo (a cada persona el suyo según la ruta que incluyo en una celda)y la otra cuestión es cómo meter la firma que ya tengo el Outlook Express como predeterminada (me abre el mail pero no le pone la firma). Esto no sería demasiado importante (ya que si no la configuro en el vba).

El código que uso es:

Private Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Sub CommandButton1_Click()
Dim Email As String, Subj As String
Dim Msg As String, URL As String
Dim r As Integer, x As String
Dim Adjunto As String, ruta As String

x = Cells(1, 5).Value
ruta = "C:\Documents and Settings\avarela\Mis documentos\Trabajadores\Nóminas\2012\"

For r = 2 To x

Adjunto = (ruta & Cells(r, 5))

Email = Cells(r, 3)


Subj = "Nómina del mes de " & Cells(r, 4)

Msg = ""
Msg = Msg & "Hola " & Cells(r, 2) & "," & vbCrLf & vbCrLf
Msg = Msg & "Adjunto te envío copia de la nómina del mes de "
Msg = Msg & Cells(r, 4).Text & "." & vbCrLf & vbCrLf

Msg = Msg & "Un Saludo" & vbCrLf
Msg = Msg & "Andrés"


Subj = Application.WorksheetFunction.Substitute(Subj, " ", "%20")
Msg = Application.WorksheetFunction.Substitute(Msg, " ", "%20")

Msg = Application.WorksheetFunction.Substitute(Msg, vbCrLf, "%0D%0A")

URL = "mailto:" & Email & "?subject=" & Subj & "&attach=" & Adjunto & "&body=" & Msg


ShellExecute 0&, vbNullString, URL, vbNullString, vbNullString, vbNormalFocus

Application.Wait (Now + TimeValue("0:00:01"))
Application.SendKeys "%s"
Next r
End Sub

Damian Omar Silva dijo...

Anyel: dejame practicar un poco, por que hasta donde tengo entendido es todo un problema enviar adjuntos con Outlook Express... siempre anda con errores de uno u otro tipo.
Apenas tenga novedades te aviso. Gracias x tu mensaje y muy bueno el código que armaste.

Manuel Alejandro Hernandez Giuliani dijo...

Funciona perfecto, muchas gracias!

Manuel Alejandro Hernandez Giuliani dijo...

Funciona perfecto, muchas gracias!

Publicar un comentario

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