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 de josecmf
1
1
josecmf, Access. Monopuesto y multipuesto. Más de 13 años de experiencia
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.