Bucle: Aviso semanal con max desde campo fecha

Recurro a ti porque mis conocimientos de aprendiz han llegado a su límite. Espero poder explicarme bien:
Estoy adaptando parte de código vb en access para un formulario que sirve de aviso basado en un campo fecha. No consigo establecer un bucle cada 7 días que repita el aviso según esto:
If (Fecha + 7) = Date Then
msg = ("- Trabajador:" & vbCrLf & vbCrLf & rst!NOMBRE & vbCrLf & vbCrLf & "- Fecha BAJA:" & vbCrLf & vbCrLf & rst!INI)
Style = vbOKOnly + vbExclamation
MsgBox msg, Style, "ATENCION: PARTE DE CONFIRMACION"
End If
¿Existiría la posibilidad de insertar un bucle? O me he ido por la tangente.

1 respuesta

Respuesta
1
Vamos por partes.
Entiendo que quieres que cuando se ejecute un código (pulsando un botón, por ejemplo), compruebe la fecha (¿de donde viene, es una variable, es un campo, es el valor de un cuadro de texto) y si es de una semana antes de hoy, muestra un mensaje. ¿Correcto?
Entonces, el bucle, para que lo quieres, ¿para qué recorra toda la tabla y muestre un mensaje para cada trabajador? Si es así, y entendiendo que en la variable rst ya has abierto un recordset de la tabla, el bucle sería:
While (Not rst.EOF) and (Not rst.BOF)
... tu código
Rst. MoveNext
Wend
¿Era esto lo que preguntabas?
Hola Jose,
Siento el break del fin de semana y la somera explicación. A ver, no me explique nada bien, je je... por partes:
- Tenemos un formulario basado en una consulta que recoge campos de fecha INI y FIN. He insertado este código, corta/pegado y modificado por mí, en un modulo para que al abrir avise:
Function RevisarBajas()
Dim rst As DAO.Recordset 'Declaro un recordset Dao
Dim strSql As String 'Declaro la variable para la consulta
Dim msg As String ' Declaro la variable para Msgbox posterior
Dim Style As String ' Declaro la variable para el estilo del Msgbox posterior
Dim N As Integer
Dim Fecha As Date
strSql = "SELECT nombre,INI,FIN FROM Con_ACC_IT_historico"  'selecciono los campos de la tabla
Set rst = CurrentDb.OpenRecordset(strSql, dbOpenDynaset) 'Abro el recordset
If rst.EOF = False Then 'Si el recordset devuelve registros...
rst.MoveLast
rst.MoveFirst
Do Until rst.EOF 'Recorremos los registros devueltos
Fecha = rst!INI
If (Fecha + 3) = Date Then ' Si la fecha coincide con la de hoy entonces...
msg = ("- Trabajador:" & vbCrLf & vbCrLf & rst!NOMBRE & vbCrLf & vbCrLf & "- Fecha BAJA:" & vbCrLf & vbCrLf & rst!INI) ' Establezco el mensaje a mostrar del Msgbox
Style = vbOKOnly + vbExclamation ' Establezco el estilo del msgbox
MsgBox msg, Style, "1er PARTE DE CONFIRMACION" '...mostramos un mensaje con el texto de la cita
End If
If (Fecha + 7) = Date Then ' Si la fecha coincide con la de hoy entonces...
msg = ("- Trabajador:" & vbCrLf & vbCrLf & rst!NOMBRE & vbCrLf & vbCrLf & "- Fecha BAJA:" & vbCrLf & vbCrLf & rst!INI) ' Establezco el mensaje a mostrar del Msgbox
Style = vbOKOnly + vbExclamation ' Establezco el estilo del msgbox
MsgBox msg, Style, "2º PARTE DE CONFIRMACION" '...mostramos un mensaje con el texto de la cita
End If
N = 7
Do While N < 545
N = N + N
If (Fecha + N) = Date And rst!FIN = "" Then ' Si la fecha coincide con la de hoy entonces...
msg = ("- Trabajador:" & vbCrLf & vbCrLf & rst!NOMBRE & vbCrLf & vbCrLf & "- Fecha BAJA:" & vbCrLf & vbCrLf & rst!INI) ' Establezco el mensaje a mostrar del Msgbox
Style = vbOKOnly + vbExclamation ' Establezco el estilo del msgbox
MsgBox msg, Style, "Atencion: ENTREGA PARTE CONFIRMACION" & N '...mostramos un mensaje con el texto de la cita
End If
Loop

rst.MoveNext 'Movemos al siguiente...
Loop '...y vuelta a empezar
End If
rst.Close 'Cerramos el recordset
End Function
Funciona perfectamente para el tercer y séptimo día desde la fecha INI pero a partir de ahí, donde he intentado insertar el bucle, no me responde con ningún campo.
Si no añado la condición... and rst! Fin = "", sí que funciona pero me devuelve todos los registros tanto los que no incluyen fecha en FIN como los que sí (cosa que no debería ser).
UF, no se día ha sido mejor o peor. Disculpame.
Porque es una gozada poder entender las cosas. No te puedes ni imaginar como pregunta la gente por ahí. Creo que el problema es la instrucción por la que determinas el que el campo FIN esté vacío, no siempre el vacío significa "", sino que a veces significa Null. Yo lo pondría así:
If (Fecha + N) = Date And (Nz(rst!FIN, "") = "") Then ...
Así, si el campo vacío es un null, la función Nz te devolverá un "" y si ya lo es, pues también. En ambos casos lo tomará como vacío.
Pruébalo y a ver si funciona.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas