Jump to content
juanmanuel85

ANSWERED problema enviar correo a toda la columna

Recommended Posts

Buenas, estoy teniendo problemas para poder enviar un correo preredactado a toda la columna, en esta  caso la "D"solo se envia a la direccion de la celda D4, quisiera saber que estoy haciendo mal.

Desde yamuchas gracias.

adjunto archivo y codigo de la macro

 

Sub EnviarEmail()

'
' 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 Saldo As String
Dim Msg As String
    '
    Set OutlookApp = New Outlook.Application
    '
    'Recorremos la columna EMAIL
    '
    For Each cell In Range("d4:d302")
        '
        'Asignamos valor a las variables
        '
        Asunto = "Aviso de vencimiento"
        Destinatario = [A11]
        Correo = cell.Value
        Saldo = Format(cell.Offset(0, 1).Value, "$#,##0")
        FechaVencimiento = Format(cell.Offset(0, 2).Value, "dd/mmm/yyyy")
        '
        'Cuerpo del mensaje
        '
        Msg = Destinatario
        '
        Set MItem = OutlookApp.CreateItem(olMailItem)
        With MItem
            .To = Range("d4:d302")
            .Subject = Asunto
            .Body = Join([transpose(b4:b14)], vbCrLf)
            .Send
            '
        End With
        '
    Next
    '
Set MItem = Nothing

End Sub

prob mail.xlsm

Share this post


Link to post
Share on other sites
En 9/7/2019 at 7:51 , juanmanuel85 dijo:

solo me llega el correo a la direccion que ingrese en D4 y no a todas las que ponga en la columna D.

Eso es imposible, algo debes hacer incorrectamente

Y ya creas una variable llamada Correo entonces queda asi:

With MItem
    .To = Correo
    .Subject = Asunto
    .Body = Join([transpose(b4:b14)], vbCrLf)
    .Send
    '
End With

 

Saludos 

Share this post


Link to post
Share on other sites

@Gerson Pineda el problema es el siguiente.

yo puedo poner un rango determinado en el destinatario,el problema es que si no estan llenas todas las celdas con direcciones de correo se envia hasta el ultimo ingresado antes de haber un bache. . te envio un ejemplo que encontre en internet que se comporta igual.

intenta poner tres vEnviar emails desde Excel - EXCELeINFO.xlsmeces tu correo , y despues con una celda vacia de por medio y vas a ver q no llega la misma cantidad de veces, mira deje un nombre libre, trata de reemplazar las direcciones del ejemplo con tu correo y vas a ver q solo te llega uno correspondiente a b 11

Share this post


Link to post
Share on other sites

Juan

Hace 25 minutos , juanmanuel85 dijo:

yo puedo poner un rango determinado en el destinatario,el problema es que si no estan llenas todas las celdas con direcciones de correo

Era tan sencillo que dijeras que podrían existir celdas vacías en ese rango

Para poder resolver eso hay varias formas, pero yo uso la sig:

.SpecialCells

Tal que
For Each cell In Range("d4:d302").SpecialCells(2)
	....
Next

Entonces de esta forma Excel solo va leer las celas que contiene correo

 

Saludos 

Share this post


Link to post
Share on other sites
Sub EnviarEmail()
'
' 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 Saldo As String
Dim Msg As String
    '
    Set OutlookApp = New Outlook.Application
    '
    'Recorremos la columna EMAIL
    '.SpecialCells
    For Each cell In Range("B11:B23").SpecialCells(2)
        'Next
        'Asignamos valor a las variables
        '
        Asunto = "Saldo vencido"
        Destinatario = cell.Offset(0, -1).Value
        Correo = cell.Value
        Saldo = Format(cell.Offset(0, 1).Value, "$#,##0")
        FechaVencimiento = Format(cell.Offset(0, 2).Value, "dd/mmm/yyyy")
        '
        'Cuerpo del mensaje
        '
        Msg = "Apreciable " & Destinatario & vbNewLine & vbNewLine
        Msg = Msg & "Queremos informarle que su fecha de pago venció el día "
        Msg = Msg & FechaVencimiento & "." & vbNewLine & vbNewLine
        Msg = Msg & "El saldo que debe liquidar es "
        Msg = Msg & Saldo & vbNewLine & vbNewLine
        Msg = Msg & "Atentamente:" & vbNewLine
        Msg = Msg & "Tarjetas de crédito."
        '
        Set MItem = OutlookApp.CreateItem(olMailItem)
        With MItem
            .To = Correo
            .Subject = Asunto
            .Body = Msg
            .Send
            '
        End With
        '
    Next
    '
End Sub

@Gerson Pineda, disculpa no manejo muy bien visual lo coloque bien? 

 

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.



×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png