Procedimiento para enviar mails personalizados

Y gracias de antemano por la ayuda que me puedas dar.
Te comento el problema, Necesito enviar un informe personalizado por colaborador a los colaboradores que tengan visitas asociadas a una fecha. La idea es enviar un informe que filtro por colaborador.
Te pongo el código:
Dim Var_Colaborador, Var_Mail As String 
SQL = "SELECT Colaborador FROM GSN_Cursos_Comunicados WHERE Obligatoria = True AND Fecha_Comunicacion = #" & Format(Me.Texto50, "dd/mm/yyyy") & "# GROUP BY Colaborador"
    Set RS = CurrentDb.OpenRecordset(SQL)
    RS.MoveFirst
Do While Not RS.EOF
        Var_Colaborador = RS!Colaborador
        Var_Mail = DLookup("[Mail]", "GSN_Colaboradores", "Colaborador = " & Var_Colaborador)
        DoCmd.OpenReport "GSN_Aviso_Visita_Obligatoria_x_Colaborador", acViewPreview, , "Colaborador = " & Chr(34) & Var_Colaborador & Chr(34)
If MsgBox("Desea enviar por mail el informe al colaborador?", vbYesNo) = vbYes Then
DoCmd.SendObject acSendReport, "GSN_Aviso_Visita_Obligatoria_x_Colaborador", "HTML", Var_Mail, , , "GSN:Informe de Visita Obligatoria", "Informe a " & Var_Colaborador & " que segun lo establecido por la Gerencia del Sector Naval los cursos especificados en el documento adjunto estan clasificados como obligatorios", False, ""
SQL2 = "SELECT F_Envio FROM GSN_Cursos_Comunicados WHERE Obligatoria = True AND Colaborador=Var_colaborador AND Fecha_Comunicacion = #" & Format(Me.Texto50, "dd/mm/yyyy") & "#"
            Set rs2 = CurrentDb.OpenRecordset(SQL2)
            rs2.edit
            rs2!f_envio = Date
        End If
        If MsgBox("Desea continuar?", vbYesNo) Then
            DoCmd.Close
            RS.MoveNext
        End If
    Loop
La idea es:
1º saco los colaboradores que tienen visitas asignadas a una fecha (que saco de un control en un formulario) y los agrupo para no tenerlos repetidos
2º con el do while recorro el recordset para enviar 1 informe a cada 1 de los colaboradores
3º el dlookup lo uso para sacar la dirección mail de cada colaborador
4º envío el informe al colaborador (el informe esta hecho sobre una consulta donde no se incluye como criterio el colaborador, con lo que se lo paso ahora para que cada colaborador vea solo sus visitas)
5º con el SLQ2 y el RS2 intento escribir la fecha de envío en la tabla.
Bien, pues ahora mismo, no salta de un informe al siguiente, solo abre el 1º de ellos, con el 1º colaborador, lo hace bien, pero debería seguir luego al 2º

1 respuesta

Respuesta
1
Revisa esta parte:
If MsgBox("Desea continuar?", vbYesNo) Then
            DoCmd. Close
            RS. MoveNext
End If
1. Preguntas pero no evaluas correctamente
2. La respuesta que des a ese msgbox siempre será True, por lo que siempre entrará en el If
3. Cierras el formulario y (incomprensiblemente) intentas moverte a un nuevo registro del recordset...
Lo que deberías hacer...
1. Evaluar correctamente:
If MsgBox("Desea continuar?", vbYesNo) = vbNo Then
2. Obrar en consecuencia:
- Para vbNo: cerrar y matar el recordset y (a discreción) cerrar el formulario
RS. Close
Set RS = Nothing
DoCmd.Close acForm, Me.Name
- Para vbYes (el Else del If que evalua la respuesta)
RS. MoveNext
Tienes razon esa linea es If MsgBox("Desea continuar?", vbYesNo) = vbYes Then
(Es cuando si que quieren continuar)
Docmd. close (cierro el informe que tengo activo)
rs.movenext (me muevo a un nuevo registro del RS, no del formulario)
La idea es que el procedimiento abre un informe con filtrado por colaborador= mengano, llega al if, y si desea continuar, cierra ese informe y lo vuelve abrir pero filtrando con colaborador=zutano y así sucesivamente con los restultados del recordset.
Creo que me he conseguido explicar un poco mejor ahora
Si lo que quieres cerrar es el informe, debes indicarlo expresamente. Tal como lo tienen tu, lo que hace es cerrar el objeto activo y (sino me equivoco) ese es el formulario ya que es dónde está el código:
DoCmd.Close acReport, "GSN_Aviso_Visita_Obligatoria_x_Colaborador"
Ya dirás como funciona
Efectivamente, con docmd.close se cierra el objeto activo y este era el informe, aun así puedo especificar que objeto quiero cerrar.
El caso es que sigo teniendo el mismo problema.
Necesito crear un bucle que haga esto
-Abrir informe filtrandolo por colaborador
- Preguntar si quiero continuar (básicamente para parar el bucle y ver el informe) y si quiero enviar el informe por mail.
-Cerrar el informe (me hace falta cerrarlo porque lo voy a volver a abrir con un filtro diferente)
Este bucle se tiene que repetir n veces, donde n es el numero de colaboradores que exista en la 1º select.
Gracias
Pues, o mucho me engaña la vista o hay algo que se me escapa porque ese código debería hacer justamente eso...
Prueba poniendo un punto de interrupción en la primera linea de código y ejecuta paso a paso porque no veo otra forma de mirarlo...
Un saludo y perdón por la demora
http://www.mvp-access.com/foro

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas