Ir al contenido principal

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

Comentarios

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

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

    ResponderEliminar
  3. Buenas tardes Damián.

    Muchas gracias por tu ayuda.

    Un saludo

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

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

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

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

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

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

    ResponderEliminar
  10. 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!

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

    ResponderEliminar
  12. 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?

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

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

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

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

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

    ResponderEliminar
  18. Funciona perfecto, muchas gracias!

    ResponderEliminar
  19. Funciona perfecto, muchas gracias!

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

funciones: convertir numeros a letras con excel

En realidad hace tiempo que vienen consultándome sobre esto... quizás cinco o seis años . Debe ser una de las funciones mas buscadas de Excel, por lejos: la posibilidad de escribir: 1.534,63 y que en una celda aparezca magicamente "un mil quinientos treinta y cuatro c/15/100". Aquí les dejo una solución, basada en funciones , sin utilizar macros, la cual preparé exclusivamente para este Blog. A pesar de los millones de usuarios que requieren esta herramienta, no viene incorporada en Excel, debemos armarla nosotros mismos .  Luego de la imagen irá la explicación de como llegué a lograr esto, dado que es un proceso medianamente complejo , que utiliza tres o cuatro funciones básicas y requiere de varios pasos. así quedará nuestra planilla y siempre devolverá en letras el valor que ingresemos en A1 [+/-] Ver el resto / Ocultar Desde ya aclaro: esta no es " la forma " de hacerlo, simplemente es una mas, evitando el uso de macros. Sobre esta base, comencemos: 1) El núme

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, t eniendo 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ó

buscarv con varios resultados

Es de las preguntas mas recurrentes que he tenido: ¿se puede lograr que la función BUSCARV() devuelva varios resultados? Si recordamos el uso de esta función, sabremos que la misma buscar en valor en el rango especificado, retornando un solo resultado. Si en la tabla tenermos varios registros iguales BUSCARV() solo nos devolverá el primero de ellos, omitiendo el resto. Entonces ¿se puede? Bueno, aplicando otra técnica sencilla que se me ocurrió al intentar solucionar el planteamiento de un lector... si, puedo hacerlo.... pero sin usar BUSCARV(). la idea es que coloquemos en E1 el código del producto a buscar y a partir de E2 nos devuelva todas las coincidencias de la tabla. [+/-] Ver el resto / Ocultar Vamos a necesitar una columna "auxiliar" para llevar a buen término este proyecto. Con macros el tema sería mas sencillo, pero aquí la cuestión es resolverlo con las funciones de Excel, sin VBA. Paso a paso: Como primer medida chequeamos que valores de la columna A coincide co