Visual Basic para Aplicaciones - Enviar email con condiciones do while

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 15
Ha aumentado 1 puesto en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Enviar email con condiciones do while

Publicado por juan francisco (10 intervenciones) el 22/11/2016 20:31:20
Tengo el siguiente código, pero cuando envía el email correctamente no escribe Enviado y la fecha cuando ha sido enviado, os pego el código:



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
Do
   If Sheets("EMAIL").Cells(fila, 1) = "" Or Sheets("email").Cells(fila, 1) = "No Enviado" Then
        Set OM = OA.createitem(olmailitem)
        para = Sheets("EMAIL").Cells(fila, 2)
        dptoemail = Sheets("EMAIL").Cells(fila, 3)
        empleadoemail = Sheets("EMAIL").Cells(fila, 4)
        doc = Sheets("EMAIL").Cells(fila, 5)
        With OM
            .To = para 'Destinatarios
            .CC = Sheets("CONFIGEMAIL").Range("C4").Value 'Con copia
            .Subject = "DETALLE HORAS MES DE" & Chr(32) & mesemail & Chr(32) & dptoemail & Chr(32) & empleadoemail '"Asunto"
            .Attachments.Add doc
            .Display  'El correo se muestra
        End With
Errores:
    Select Case Err.Number
        Case Is = 0
            Sheets("EMAIL").Cells(fila, 1) = "Enviado" & Chr(32) & Now
            fila = fila + 1
        Case Else
            Sheets("EMAIL").Cells(fila, 1) = "No Enviado"
            fila = fila + 1
    End Select
    Else
        fila = fila + 1
    End If
Set OM = Nothing
Loop While fila <= ufila
Set OA = Nothing
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
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Enviar email con condiciones do while

Publicado por Antoni Masana (498 intervenciones) el 23/11/2016 11:56:34
He movido un poco los filas para alinearlas y he realizado algun cambio que optimiza la función.

Encuentro a faltar algunas cosillas:

- No veo donde se asigna mesamail
- No veo cuando se envía el correo. Que sepa para enviar es el comando .Send y no el .Display lo que me extraña es que lo llegue a enviar


Sacado de esta pagina de internet: http://excelyvba.com/enviar-email-vba/

Con el comando “.Display” vamos amostrar el email en pantalla pero no
se va a mandar. Si queremos que Outlook mande el email de manera
automática tenemos que sustituir “.Display” por el comando “.Send”.


A parte de lo dicho anteriormente con el display te muestra el correo y no lo envía, tienes que darle al Botón enviar y no controlas desde la macro si se envío.

Con el .Send se envía sin enseñar el correo y se controla el error de envío. Además en tu codigo tienes que añadir dos líneas que te comento más abajo para que funcione

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
Sheets("EMAIL").Select
Do
   If Cells(fila, 1) = "" Or Cells(fila, 1) = "No Enviado" Then
 
      Set OM = OA.createitem(olmailitem)
 
      para = Cells(fila, 2)
      dptoemail = Cells(fila, 3)
      empleadoemail = Cells(fila, 4)
      doc = Cells(fila, 5)
 
      On Error Goto Errores
      With OM
          .To = para 'Destinatarios
          .CC = Sheets("CONFIGEMAIL").Range("C4").Value 'Con copia
          .Subject = "DETALLE HORAS MES DE" & Chr(32) & _
                                   mesemail & Chr(32) & _
                                  dptoemail & Chr(32) & empleadoemail '"Asunto"
          .Attachments.Add doc
          .Send  'El correo se envía sin mostrarse por la pantalla
      End With
      On Error Goto
:Errores
      If Err.Number = 0 Then Cells(1, 1) = "Enviado " & Now _
                       Else: Cells(1, 1) = "No Enviado"
   End If
 
   fila = fila + 1
   Set OM = Nothing
Loop While fila <= ufila
 
Set OA = Nothing

Para el control de errores en el envío te faltaban lo que he puesto en las líneas 13 y 23 y en la 21 cambia el Display por Send

El Case se podría sustituir por un IF. El carácter 32 es un espacio, dale menos trabajo al ordenador

Con la intrucción de la línea 1 te ahorras estar poniendo la misma hoja para cada celda

No se si después de todo lo escrito se entiende la solución del problema.

Saludos.
\\//_
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
sin imagen de perfil
Val: 15
Ha aumentado 1 puesto en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Enviar email con condiciones do while

Publicado por juan francisco (10 intervenciones) el 24/11/2016 19:19:53
Muchas Gracias por la respuesta, ahora ando un poco liado, lo probaré, gracias por todo
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