Los datos que se piden siempre se deben validar para evitar errores de ejecución. Para que no se complique con mascaras de entrada (nunca las utilizo) ni fijar el formato hora en el cuadro de texto, utilice la función Replace() de tal forma que si ingresa en el cuadro de texto 9,20 o 9.20 lo convierta en 9:20. Si ingresa 9:20 lo deje igual.
PRIMER PASO
Adicione este código al evento Antes de Actualizar en el cuadro de texto que pide la hora: para validar que ingrese un formato de hora válido. Por ejemplo, si ingresa A:30 o A.30 o A, 30 le informe de la inconsistencia.
Private Sub ctlhoras_BeforeUpdate(Cancel As Integer)
If Not IsDate(Me.ctlhoras) Then
MsgBox "Digiete la hora como hh:mm, h.mm o h,mm", vbInformation, "Error..."
Cancel = True
End If
End Sub
SEGUNDO PASO
Agregue este código al evento Después de actualizar en el cuadro de texto que pide la hora: (Asumo que la tabla se llama tlblcontrol y existe el campo Hora tipo Fecha/Hora con formato Hora Corta y que el formulario tiene los cuadros de texto ctlhoras y ctlhay). En el cuadro de texto ctlhoras se ingresa la hora a contar.
Dim buscar_coma As Integer
Dim buscar_punto As Integer
buscar_coma = InStrRev(Me.ctlhoras, ",")
buscar_punto = InStrRev(Me.ctlhoras, ".")
If buscar_coma > 0 Then ' hay decimal y es una coma (,) remplazo por dos puntos (:)
Me.ctlhoras = Replace(Me.ctlhoras, ",", ":", 1)
ElseIf buscar_punto > 0 Then
Me.ctlhoras = Replace(Me.ctlhoras, ".", ":", 1) 'hay punto (.) reemplazo por dos puntos (:)
End If
If DCount("*", "tblcontrol", "hora=#" & Me.Hora & "#") > 1 Then
Me.ctlhay = "Si hay horas"
Else
Me.ctlhay = "No hay horas"
End If
Está probado y funciona. Si quiere el ejemplo escríbame [email protected] y se lo remito.