Como comparar un campo de un formulario con el de una tabla en Access y que nos de un color en concreto por ejemplo

Me imagino que debe estar por ahí …, y seguro que ya debería saber hacerlo pero no me acuerdo :(. Vamos a ver, lo que quiero es lo siguiente:

Tengo por un lado un formulario llamado RTurnoscruzadosinvierno, el cual tiene un campo llamado fechavirtual que proviene de una consulta llamada "turnoscruzadosinvierno".

Por otro lado tengo una tabla llamada Festivos con un campo llamado festivo que es de tipo fecha.

Yo lo que quiero básicamente es que si fechavirtual es = fecha que el campo fecha virtual aparezca en color amarillo por ejemplo.

Imagino que estaría correcto ponerlo en el evento del formulario al cargar.

2 respuestas

Respuesta
1

Andrés: Si esta pregunta está conectada con >> "Calendario de turnos rotativos en Access",

Imagino que en el Formulario tendrás nombres de campo en tipo Fecha >> 06/09/2018

Voy a partir de una Tabla >> TblFestivos en la que hay entre otros campos uno que se llama DiaF.

El Código sería >>

Private Sub Form_Load()
Dim Ctrl As Access.Control
Dim StrSQL As String
Dim Rst As DAO.Recordset
StrSQL = "SELECT DiaF FROM TblFestivos ORDER BY DiaF;"
Set Rst = CurrentDb.OpenRecordset(StrSQL, dbOpenSnapshot)
'Por rutina me aseguro de que hay registros en el Recordset
If Not Rst.EOF And Not Rst.BOF Then
   Rst.MoveLast
   Rst.MoveFirst
   Do While Not Rst.EOF
      Dim NombCampo As String
      For Each Ctrl In Me.Controls
          If Ctrl.ControlType = acTextBox Then
              NombCampo = Format(CStr(Ctrl.Name), "dd/mm/yyyy")
              If NombCampo = Format(CStr(Rst!DiaF), "dd/mm/yyyy") Then
                  Ctrl.BackColor = RGB(255, 255, 0)
              End If
          End If        
      Next Ctrl
      Rst.MoveNext
      DoEvents
   Loop
Else
   MsgBox "Algo raro ocurre, porque el Recordset está vacío",vbCritical,"RECORDSET VACIO"
End If
Rst.Close
Set Rst = Nothing
End Sub

Adapatalo a tus Nombres de Tabla y Campo, y pon el Formato del Festivo en Fecha Corta dd/mm/yyyy. Y si tomas la costumbre de valorar las respuestas será magnifico. Mis saludos >> Jacinto

Buenos días Jacinto y ante todo muchas gracias por tu tiempo, lo de las valoraciones lo miro, puede que se me pasara alguna, aunque yo normalmente si se soluciona el problema lo suelo valorar, sino fue así disculpa. Respecto al código me da error 438 en tiempo de ejecución, que no admite esa propiedad o método en esta línea: fechavirtual = Format(CStr(Ctrl.fechavirtual), "dd/mm/yyyy")

De todas formas te pongo el código ya que posiblemente tenga errores, mi tabla a comparar se llama FESTIVOS, el campo de esa tabla se llama FESTIVO y el campo del formulario que hay que comparar se llama FECHAVIRTUAL.

Private Sub Report_Load()
Dim Ctrl As Access.Control
Dim StrSQL As String
Dim Rst As DAO.Recordset
StrSQL = "SELECT Festivo FROM Festivos ORDER BY Festivo;"
Set Rst = CurrentDb.OpenRecordset(StrSQL, dbOpenSnapshot)
'Por rutina me aseguro de que hay registros en el Recordset
If Not Rst.EOF And Not Rst.BOF Then
   Rst.MoveLast
   Rst.MoveFirst
   Do While Not Rst.EOF
      Dim fechavirtual As String
      For Each Ctrl In Me.Controls
          If Ctrl.ControlType = acTextBox Then
              fechavirtual = Format(CStr(Ctrl.fechavirtual), "dd/mm/yyyy")
              If fechavirtual = Format(CStr(Rst!festivo), "dd/mm/yyyy") Then
                  Ctrl.BackColor = RGB(255, 255, 0)
              End If
          End If
      Next Ctrl
      Rst.MoveNext
      DoEvents
   Loop
Else
   MsgBox "Algo raro ocurre, porque el Recordset está vacío", vbCritical, "RECORDSET VACIO"
End If
Rst.Close
Set Rst = Nothing
End Sub

Andrés: Antes de seguir dime por favor si estás trabajando con un "Formulario", tal como inicialmente pone la pregunta o con un informe, que es lo que deduzco según el código que citas.

Si es que realmente se trata de un Informe, has un par de cambios y me comentas:

1.- En lugar de Report_Load usa el Evento >> Al dar formato de la sección de Detalle>>

Private Sub Detalle_Format(Cancel As Integer, FormatCount As Integer)

End Sub

2.- Por si acaso, cambia Dim FechaVirtual As String por >> Dim NombCampo As String

Y lo que hay entre el For y el Next por >>

If Ctrl.ControlType = acTextBox Then
    NombCampo = Format(CStr(Ctrl.Name), "dd/mm/yyyy")
    If NombCampo = Format(CStr(Rst!Festivo), "dd/mm/yyyy") Then
         Ctrl.BackColor = RGB(255, 255, 0)
    End If
End If

Con esa estructura pero con los Nombres de mi Tabla y Campo he obtenido>>

Un saludo >> Jacinto

Gracias de nuevo Jacinto,

Tienes razón, mi pregunta está mal formulada, yo quería decir informe. Probé apuradamente como me dijiste pero no me va, se ralentiza mucho y al final aparece campo fecha así:

20/11/yyyy, sin que aparezca en color alguno.

Andrés: La estructura de ese informe y lo que te he sugerido, si el informe tiene muchas fechas, según la máquina se ralentiza mucho el proceso. Se debería de Cambiar el tipo de Informe, por ejemplo poniendo las fechas en una primera columna y los Grupos como cabecera.

Si no tienes datos personales o confidenciales en esa BD y quieres ponerla aquí, seguro que además de mi respuesta puedes tener otras y elegir la que más se adapte a tus necesidades.

El que te devuelva ese valor la verdad es que no tengo ni idea de dónde puede venir.

Un saludo >> Jacinto

Buenas de nuevo Jacinto, el informe ya lo tengo con las fechas en la primera columna y los grupos como cabecera (son 7 personas). No tengo problema en subirla, lo que pasa es que nunca subí ningún archivo en esta página y no veo la forma de adjuntarlo ¿o te refieres pantallazos?

Andrés: Si quieres me la envías a [email protected] y si lo autorizas, cuando haya visto como conseguir lo que quieres yo la subo, o con el enlace que te facilito ahora la subes tu después.

Esta es la primera o segunda pregunta que yo hice en Todoexpertos y la contestación que me dieron.

Subir Fichero y que sea compartido. Expertos

Un saludo >> Jacinto

Buenos días Jacinto, ya pongo aquí el enlace a ver si funciona. En festivos puse sólo los de este año para que no se relantice tanto el programa. (a ver si no ves muchas animaladas ;)). Ya puestos si es posible y fácil (yo se uno a uno con formato condicional pero es un rollo ya que si cambias el trabajador tienes que modificar las condiciones), también quería que según el tipo de turno apareciese en colores: por ejempo L y V en verde, Tn en rojo, etc. Muchas gracias anticipadas por tu respuesta.

http://www.mediafire.com/file/9lp9j89zqm518f5/Turnos_Ro_Neckkito.mdb/file 

En el campo fecha virtual del informe sale 20-11-yyyy puesto que yo le puse el formato "dd/mm/yyyy" como me comentaste pero mi Access no debe reconocerlo, le puse dd/mm/aaaa y ya sale correctamente, eso sí el color en el campo sigue sin visualizarse.

Andrés: Ahoraacabo de ver tu mensaje y me he bajado el fichero.

A la que tenga un rato de tiempo lo dedico a mirar tus peticiones y te comento. Saludos >> Jacinto

Cuando puedas Jacinto, sin prisa, gracias.

Andrés: Creo que las modificaciones que he hecho en la BD que me enviaste, resuelven las dudas que tenías.

http://www.mediafire.com/file/heoq7x7fb2qp131/TurnosRoNeckkito_00.rar/file 

Mis saludos >> Jacinto

Perfecto Jacinto, me saco el sombrero. Es increíble cómo hacéis de lo complicado, algo super fácil, ¡Muchas gracias!. Cada vez más sé que apenas sé nada ;) ...

Respuesta

Asi es. 

De esa manera lo puedes hacer.

Puedes recuperar tus campos con la función Dlookup.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas