Visual Basic - Uso "for each" y sólo me toma la última fila

Life is soft - evento anual de software empresarial
 
Vista:

Uso "for each" y sólo me toma la última fila

Publicado por Gerd Pinninghoff (2 intervenciones) el 30/08/2022 16:31:43
Hola,

Estoy tratando de automatizar correos por excel y cuando utilizo for each para que tome cada fila, la macro solo envia el correo a la última fila de datos. Por ejemplo, pongo de rango desde C4 a C25 y sólo envia el correo de la fila 25. Alguien me podría ayudar a corregirlo para que me tome todas las filas y no solo las últimas por favor
Adjunto lo que utilicé:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Sub EnviarEmail()
Dim OutlookApp As Outlook.Application
Dim MItem As Outlook.MailItem
Dim CeldaCorreo As Range
Dim Asunto As String
Dim Correo As String
Dim Destinatario As String
Dim Msg As String
 
Set OutlookApp = New Outlook.Application
 
For Each CeldaCorreo In Range("C4:C25")
 
 
 
Asunto = CeldaCorreo.Offset(0, 2)
Correo = CeldaCorreo.Value
FechaEmision = Format(CeldaCorreo.Offset(0, 1).Value, "dd/mm/yyyy")
 
Msg = "Estimados/as" & vbNewLine & vbNewLine
Msg = Msg & "Junto con saludar, y entendiendo plazos de entrega, quería consultar si habrá recibido conforme la "
Msg = Msg & Asunto & " enviada el día " & FechaEmision & "." & vbNewLine
Msg = Msg & "En caso de ser así, agradecería que nos pudiesen confirmar la fecha de despacho y si lo tuviesen, el número de OT y empresa de transporte utilizada" & vbNewLine
Msg = Msg & "Gracias de antemano" & vbNewLine
Msg = Msg & "Saludos cordiales,"
 
Next
 
Set MItem = OutlookApp.CreateItem(o1MailItem)
With MItem
.To = Correo
.Subject = Asunto
.CC = ""
.Body = Msg
.Send
 
 
End With
 
End Sub

Gracias de antemano por su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 145
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Uso "for each" y sólo me toma la última fila

Publicado por Sah1d Ra (191 intervenciones) el 30/08/2022 18:56:46
coloca el next despues del End With

quiza podria servir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Uso "for each" y sólo me toma la última fila

Publicado por Gerd Pinninghoff (2 intervenciones) el 31/08/2022 17:06:54
Hola, gracias por tu respuesta

Lo intente poner pero ahora me dice Next sin for
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 145
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Uso "for each" y sólo me toma la última fila

Publicado por Sah1d Ra (191 intervenciones) el 31/08/2022 17:26:57
Hola, segun mi analisis es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
For Each CeldaCorreo In Range("C4:C25") 'Comienza el ciclo dentro del rango
    Asunto = CeldaCorreo.Offset(0, 2) 'Carga el asunto
    Correo = CeldaCorreo.Value 'Carga el correo
    FechaEmision = Format(CeldaCorreo.Offset(0, 1).Value, "dd/mm/yyyy") 'Carga la fecha
    Msg = "Estimados/as" & vbNewLine & vbNewLine
    Msg = Msg & "Junto con saludar, y entendiendo plazos de entrega, quería consultar si habrá recibido conforme la "
    Msg = Msg & Asunto & " enviada el día " & FechaEmision & "." & vbNewLine
    Msg = Msg & "En caso de ser así, agradecería que nos pudiesen confirmar la fecha de despacho y si lo tuviesen, el número de OT y empresa de transporte utilizada" & vbNewLine
    Msg = Msg & "Gracias de antemano" & vbNewLine
    Msg = Msg & "Saludos cordiales," 'Carga el mensaje
Next 'Repite pero nunca envia el mensaje, solo va cambiando el asunto, correo y fecha junto con el mensaje
 
Set MItem = OutlookApp.CreateItem(o1MailItem)
    With MItem
    .To = Correo ' Agrega el ultimo correo de la fila
    .Subject = Asunto 'Agrega el ultimo asunto de la fila
    .CC = ""
    .Body = Msg ' Agrega el mensaje
    .Send
End With

Mi lógica es que carga todos los correos pero al final solo envía el ultimo, por eso comentaba el realizar el cambio del next despues del end with

agrega el siguiente codigo despues del End With
1
Next CeldaCorreo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 355
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Uso "for each" y sólo me toma la última fila

Publicado por raul (160 intervenciones) el 01/09/2022 17:04:12
Según tu propia lógica tienes una sola cosa mal.
Next debe ir debajo de la línea
End With
De esta forma hará lo que quieres.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar