Problema con Macro, no inserta salto de línea y no muestra firma de outlook

Estoy intentando mandar correos masivos desde una macro pero tengo problemas, hay un saltos de línea que no me inserta y no me muestra la firma. Además hay algo al final del mensaje que me gustaría que no saliese, les dejo el código que uso y una foto de como se ve en correo que se envía

rivate Sub cmdEnviarEmail_Click()
'
' Declaramos variables
'
Dim OutlookApp As Outlook.Application
Dim MItem As Outlook.MailItem
Dim cell As Range
Dim Asunto As String
Dim Correo As String
Dim Destinatario As String
Dim Empresa As String
Dim Msg As String
Dim Firma As String
'
Set OutlookApp = New Outlook.Application
'
'Recorremos la columna EMAIL
'
For Each cell In Range("B2:B3")
'
'Asignamos valor a las variables
'
Asunto = "Cape Marketing - Posicionamiento Online"
Destinatario = cell.Offset(0, -1).Value
Correo = cell.Value
Empresa = cell.Offset(0, 1).Value
keyword = cell.Offset(0, 2).Value
Firma = Environ("appdata") & _
"\Microsoft\Signatures\alex-carpe.html"
'Cuerpo del mensaje
'
Msg = "Estimado " & Destinatario & vbNewLine
Msg = Msg & "Le escribo desde 
Msg = Msg & Empresa & ", no esta rankeando en primera pagina para la palabra clave "
Msg = Msg & keyword & "." & vbNewLine
Msg = Msg & "Mejorar su posicionamiento en Google y poder aparecer entre los diez primeros resultados para keywords relacionadas con los servicios que presta, le generara mucha visibilidad así como un aumento en el volumen de negocio " & vbNewLine
Msg = Msg & "Quedamos a su disposicion, puede contactar con nosotros por telefono en el 680874675 o bien visitando nuestra página web www.carpe-marketing.com:" & vbNewLine
Msg = Msg & "Atentamente:" & vbNewLine
Msg = Msg & "Alejandro Marcos"
'
Set MItem = OutlookApp.CreateItem(olMailItem)
With MItem
.To = Correo
.Subject = Asunto
.HTMLBody = Msg & Signature
.Send
'
End With
'
Next
'
End Sub

1 Respuesta

Respuesta

[Hola

La propiedad HTMLBody del objeto OutLook necesariamente tiene ser llenada con etiquetas HTML ya que no reconoce texto a secas y/o constantes como VbNewLine como lo que estás intentando; asimismo tu variable "Signature" es simplemente una cadena de texto que incluye una ruta, nada más. Por cierto, si tu idea es que la firma sea una imagen, pues eso de ahí es una página html, así que tampoco es que resultaría con eso (así haya una imagen en dicha página).

Por cierto, lo que no quieres que se vea, no queda claro de dónde salió.

Abraham Valencia

Muchas gracias, la verdad es que, me dejaste igual, no tengo ni la menor idea de como continuar y hacer que resulte en lo que quiero... Pero bueno ya sé que algo estoy haciendo mal gracias a tu respuesta

[Hola

Cuando algunos vemos una macro asumimos que la persona algo del tema entiende, pero no hay problema.

Mira, yendo al primer punto, el dilema es que no es VBA lo que se aplica sino HTML, o sea, hay que saber otro lenguaje para usar la propiedad HTMLBody. Un ejemplo:

.HTMLBody = "<html>" & _
    "<body>" & _
        "<p>Estimado amigo" & _
            "</p>" & _
                "<p>Aquí en Perú todo bien, espero que tú igual.</p>" & _
                    "<p>Te volveré a escribir pronto.</p>" & _
                        "<p> </p>" & _
                            "<p><strong>Abraham Valencia</strong></p>" & _
                                "</body>" & _
                                    "</html>"

Y no, no hay otra forma de hacerlo. Para que, quizá, se entienda mejor, así se vería en una web y/o en algún programa para hacer webs:

<html>
<body>
<p>Estimado amigo</p>
<p>Aquí en Perú todo bien, espero que tú igual.</p>
<p>Te volveré a escribir pronto.</p>
<p> <strong>Abraham Valencia</strong></p>
</body>
</html>

¿Se entendió mejor?

Abraham Valencia

PD: Lo de la firma, después

Gracias por responder nuevamente. Si, mis conocimientos sobre macros son limitados, tengo lagunas en muchos aspectos, pero siempre estamos intentando mejorar.

Si entiendo lo que me dices, pero si ves mi macro, yo dependiendo del mensaje capturo unas palabras del excel para implementarlas al mensaje, esto se podría hacer también en HTML?

Claro que se puede, solo hay que usar las variables y las etiquetas HTML adecuadas tratando de que todo encaje bien. Mira una pequeña muestra:

.HTMLBody = "<html>" & _
    "<body>" & _
        "<p>Estimado " & Destinatario & _
            "</p>" & _
                "<p>Aquí en Perú todo bien, espero que tú igual.</p>" & _

¿Notas la variable "Destinatario? Espero que sí. Eso tendrías que hacer, y claro, dale una repasadita a las etiquetas básicas del HTML, no son tan complicadas, lo que puede ser un poco complicado es armarlas entre las comillas y con las variables, pero no es imposible.

Abraham Valencia

Llevo un rato armándolo y cuando he ido a probarlo me salta error en la línea .HTMLBody =

Y me dice Error de compilación: Referencia no valida o sin calificar,

¿Qué referencia he de usar?

Vale, ya se lo que estaba haciendo mal ahora me encuentro que me envía el mensaje el blanco

HTMLBody = "<html>" & _
"<body>" & _
"<p>Estimado " & Destinatario & _
"</p>
" & _
"<p>Le escribo debido a que su empresa " & Empresa & _
"<p>no esta rankeando en primera pagina para la palabra clave</p>
" & keyword & _
"</p>
" & _
"<p> Mejorar su posicionamiento en Google y poder aparecer entre los diez primeros resultados para keywords relacionadas con los servicios que presta, le generara mucha visibilidad así como un aumento en el volumen de negocio. </p>
" & _
"<p> Quedamos a su disposición, puede contactar con nosotros por teléfono en el 680874675 o bien visitando nuestra página web <a href=""https://carpe-marketing.com""> Carpe Marketing </a> </p>
" & _
"<p> Atentamente </p>
" & _
"<p> Alejandro Marcos </p>
" & _
"</body>" & _
"</html>"

¿Me podrías ayudar con esto? Nunca pensé que fuese tan difícil

También solucione lo anterior por mi mismo, cuesta pero con los conocimientos que tengo lo voy sacando, solo me quedaría agregar la firma ahora que ya envío el mensaje como HTML

¿Tienes ya tu firma como imagen (jpg)? ¿Está en alguna carpeta de tu PC?

Abraham Valencia

La firma la tengo en formato HTML, ahora mismo estoy así

Y esta es la macro

Private Sub cmdEnviarEmail_Click()
'
' Declaramos variables
'
Dim OutlookApp As Outlook.Application
Dim MItem As Outlook.MailItem
Dim cell As Range
Dim Asunto As String
Dim Correo As String
Dim Destinatario As String
Dim Empresa As String
Dim Firma As String
Dim HTMLBody As String

'
Set OutlookApp = New Outlook.Application
'
'Recorremos la columna EMAIL
'
For Each cell In Range("B2:B3")
'
'Asignamos valor a las variables
'
Asunto = "Facturación"
Destinatario = cell.Offset(0, -1).Value
Correo = cell.Value
Empresa = cell.Offset(0, 1).Value
Facturacion = cell.Offset(0, 2).Value

'Cuerpo del mensaje
'
HTMLBody = "<html>" & _
"<body>" & _
"<p>Estimado " & Destinatario & _
"</p>
" & _
"<p>S " & Empresa & "h " & x & _
"</p>
" & _
"<p> Atentamente </p>
" & _
"<p> Alejandro Marcos </p>
" & _
"</body>" & _
"</html>"
'Firma
'
spie = "<div> <TABLE BORDER> <table width= ""100%"" style=""border:none""> <TR> <TD ROWSPAN=2 width=""5%"" height=""100%"" style=""padding-left:0px; padding-right:0px; border: none;""> <a href=""https://www.carpe-marketing.com"" target=""blank""><img src=""http://carpe-marketing.com/wp-content/uploads/Logo-email-def.jpg"" width=""70"" height=""150"" style=""padding-top:0px;""></a></TD> <td width=""430"" height=""170"" style=""padding-left:10px; padding-bottom: 60px; font-family: Helvetica, Arial, sans-serif; font-size:13px; line-height:16px; border-top: none"" valign=""bottom""> <p style=""font-size:18px;""><b>Alejandro Marcos</b></p>
<br> <p style=""font-size=15px;""><b>[email protected] <br> Teléfono: 680874675 <br> Web: <a href=""https://www.carpe-marketing.com"" target=""_blank"">Carpe-marketing.com</a> </b></p>
<br> <br> <p style=""line-height:19px;"">© 2019 Todos los derechos reservados</p>
</td> </TR> </table> </TABLE>"
Firma = spie & "<p>Este correo electrónico y los archivos que pueda contener es confidencial, propiedad de CARPE Maketing y para uso exclusivo de la(s) persona(s) a quien(es) se dirige. Si el lector de esta transmisión electrónica no es el destinatario, se le notifica que cualquier distribución o copia de la misma está estrictamente prohibida por la ley. Si ha recibido este correo por error le solicitamos notificar inmediatamente a la persona que lo envió y borrarlo definitivamente de su sistema. Si ha recibido este mensaje por error, debe saber que su lectura, copia y uso están prohibidos. Si ha recibido este mensaje por error, favor notifíquelo a CARPE Marketing de inmediato y desechelo de su sistema.</p>
</div>"

Set MItem = OutlookApp.CreateItem(olMailItem)
With MItem
.To = Correo
.Subject = Asunto
.HTMLBody = HTMLBody & Firma
.Send
'
End With
'
Next
'
End Sub

Entiendo que cambiando algo de css, aunque no tengo muy claro el donde de momento, lograre hacer desaparecer el marco de la tabla y hacer la imagen más grande

Usa esto:

HTMLBody = "<html>" & _
"<body>" & _
"<p>Estimado " & Destinatario & _
"</p>" & _
"<p>S " & Empresa & "h " & x & _
"</p>" & _
"<p> Atentamente </p>" & _
"<p> Alejandro Marcos </p>" & _
"</body>" & _
"</html>"
spie = "<div> <TABLE BORDER> <table width= ""100%"" style=""border:none""> <TR> <TD ROWSPAN=2 width=""5%"" height=""100%"" style=""padding-left:0px; padding-right:0px; border: none;""> <a href=""https://www.carpe-marketing.com"" target=""blank""><img src=""http://carpe-marketing.com/wp-content/uploads/Logo-email-def.jpg"" width=""70"" height=""150"" style=""padding-top:0px;""></a></TD> <td width=""430"" height=""170"" style=""padding-left:10px; padding-bottom: 60px; font-family: Helvetica, Arial, sans-serif; font-size:13px; line-height:16px; border-top: none"" valign=""bottom""> <p style=""font-size:18px;""><b>Alejandro Marcos</b></p>" & _
"<br> <p style=""font-size=15px;""><b>[email protected] <br> Teléfono: 680874675 <br> Web: <a href=""https://www.carpe-marketing.com"" target=""_blank"">Carpe-marketing.com</a> </b></p>" & _
"<br> <br> <p style=""line-height:19px;"">© 2019 Todos los derechos reservados</p>" & _
"</td> </TR> </table> </TABLE>"
Firma = spie & "<p>Este correo electrónico y los archivos que pueda contener es confidencial, propiedad de CARPE Maketing y para uso exclusivo de la(s) persona(s) a quien(es) se dirige. Si el lector de esta transmisión electrónica no es el destinatario, se le notifica que cualquier distribución o copia de la misma está estrictamente prohibida por la ley. Si ha recibido este correo por error le solicitamos notificar inmediatamente a la persona que lo envió y borrarlo definitivamente de su sistema. Si ha recibido este mensaje por error, debe saber que su lectura, copia y uso están prohibidos. Si ha recibido este mensaje por error, favor notifíquelo a CARPE Marketing de inmediato y desechelo de su sistema.</p></div></html>"""

Comentas

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas