¿Cómo enviar correo outlook mediante una macro desde EXCEL, obteniendo datos de un formulario y de celdas de una planilla?

Actualmente estoy desarrollando una macro que envía un correo de aviso. Me gustarían dos cosas: 1) que los destinatarios sean agregados en un TextBox de un formulario, y que 2) el mensaje que entregue dependa de cierta información que sea recolectada por un Combobox de un formulario y por información que aparece en ciertas celdas en una hoja de la planilla en la que trabajo.

Si se dan cuenta, los parámetros probando1, probando2, etc... Deberían ser datos obtenidos de formularios y celdas, sin embargo desconozco la forma de incluirlas acá.

Actualmente tengo esto:

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 = "[email protected]"
.CC = ""
.BCC = ""
.Subject = "Reporte"
.BodyFormat = 2
.HTMLBody = "<HTML> " & _
"<BODY>" & _
"<P>" & "Se ha reportado un evento  asignándole el código " & codigofolio & ", favor completar la siguiente tabla:" & "</P>" & _
"<table border>" & "<tr> <th> Fechaocurre </th> <th>valor2</th> <th>valor3</th> <th>valor4</th> </tr>" & _
"<tr> <td> Probando1 </td> <td> probando2 </td> <td> probando3 </td> <td> probando4 </td> </tr>" & "</table>" & _
"<P>" & "Saludos," & "</P>" & _
"</BODY> " & _
"</HTML>"
.Send
End With
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing
End Sub

3 Respuestas

Respuesta
2

Si vas a enviar el correo desde el formulario, supongo que tienes un commandbutton dentro del formulario, entonces, lo primer que hay que hacer es cambiar esto:

Sub OutlookMailExcelAdjunto()

Por la llamada a un botón del formulario:

Private Sub CommandButton1_Click()

Lo siguiente que agregué a la macro es la validación al textbox1 y al combobox1 para que el correo sea enviado con información, si no quieres la validación, puedes omitir las líneas en la macro.

If TextBox1 = "" Then
MsgBox "El textbox está vacío, favor de llenar el destinatario"
Exit Sub
End If
If ComboBox1 = "" Then
MsgBox "El combo está vacío, favor de llenar"
Exit Sub
End If


En tu pregunta, mencionas lo siguiente:

"el mensaje que entregue dependa de cierta información que sea recolectada por un Combobox" y por información que aparece en ciertas celdas en una hoja"

Pero no pusiste cuáles celdas, ni cuál es la dependencia del Combobox; puede ser que dependiendo de lo que se ponga en combo, ¿es la información que se obtenga de las celdas?

A continuación, solamente estoy poniendo un ejemplo de cómo se puede poner la información del combo y de las celdas en el correo.

El dato del combo lo estoy poniendo en el asunto del correo de esta forma

.Subject = "Reporte " & ComboBox1

Estoy asignado a las variables probando 1,2 3 y 4, el valor de 4 celdas.

Si sabes qué celda debe ir en cada probando, solamente cambia "A2", "B2", "C2" y "D2" por la celda que necesites.

    probando1 = Range("A2")
    probando2 = Range("B2")
    probando3 = Range("C2")
    Probando4 = Range("D2")

También le hice unos ajuste al cuerpo del mensaje para que tome el contenido de las variables y no te ponga textualmente "probando1".

Private Sub CommandButton1_Click()
'Por.Dante Amor
    If TextBox1 = "" Then
        MsgBox "El textbox está vacío, favor de llenar el destinatario"
        Exit Sub
    End If
    If ComboBox1 = "" Then
        MsgBox "El combo está vacío, favor de llenar"
        Exit Sub
    End If
    '
    Set dam = CreateObject("outlook.application").createitem(0)
    ActiveWorkbook.Save
    probando1 = Range("A2")
    probando2 = Range("B2")
    probando3 = Range("C2")
    probando4 = Range("D2")
    With dam
        .To = TextBox1
        .CC = ""
        .BCC = ""
        .Subject = "Reporte " & ComboBox1
        .BodyFormat = 2
        .HTMLBody = "<HTML> " & _
        "<BODY>" & _
        "<P>" & "Se ha reportado un evento  asignándole el código " & codigofolio & ", favor completar la siguiente tabla:" & "</P>" & _
        "<table border>" & "<tr> <th> fechaocurre </th> <th>valor2</th> <th>valor3</th> <th>valor4</th> </tr>" & _
        "<tr> <td>" & _
        probando1 & "</td> <td>" & _
        probando2 & "</td> <td>" & _
        probando3 & "</td> <td>" & _
        probando4 & "</td> </tr>" & "</table>" & _
        "<P>" & "Saludos," & "</P>" & _
        "</BODY> " & _
        "</HTML>"
        .Display
    End With
    Set dam = Nothing
End Sub

Si tienes dificultades, para adaptar la macro a tu formulario avísame.

Casi al final de la macro tienes esta línea:

. Display

Cuando termines tus pruebas y la macro esté lista, cambia por esta:

. Send

Respuesta
1

Te dejo otra página adicional a las que ya te enviaron

http://www.rondebruin.nl/win/s1/outlook/mail.htm

Respuesta
-1

http://www.programarexcel.com/2013/08/formulario-de-alerta-y-envio-de-mail.html 

http://www.programarexcel.com/2013/12/macro-emite-aviso-y-envia-mail.html 

http://www.programarexcel.com/2014/01/macro-emite-aviso-y-envia-mail-varios.html 

Hola te paso tres ejemplos que te pueden ayudar, descarga el archivo, solo tienes que configurar el servidor smpt saliente y tu usuario y cuenta de mail.

Fijate y me comentas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas