Ubicar hora actual entre un rango de horas preestablecidas

Buenos a todos,

Nuevamente solicito de su apoyo con pequeño problema que tengo, de manera general lo puedo hacer dentro de excel pero VBA no me da el valor correcto, mi intención es establecer un turno dependiendo de la hora que se inicie un formulario, para eso tengo el siguiente código:

Dim hora, DiaE, DiaS, TardeE, TardeS As Date
hora = Format(Time, "h:mm AM/PM")
DiaE = Format("6:30", "h:mm AM/PM")
DiaS = Format("14:30", "h:mm AM/PM")
TardeE = Format("14:30", "h:mm AM/PM")
TardeS = Format("22:00", "h:mm AM/PM")
turno = Empty
If hora >= DiaE And hora <= DiaS Then
    turno = 2
        Else
        If hora >= TardeE And hora <= TardeS Then
        turno = 3
            Else
                turno = 1
        End If
End If
End Sub

sin embargo el valor que devuelve la variable turno no coincide con el valor esperado.

También lo intenté poniendo entre comillas las horas, por ejemplo "6:30" o "14:30" sin buenos resultados.

2 Respuestas

Respuesta
1

Cambia la siguiente línea

Dim hora, DiaE, DiaS, TardeE, TardeS As Date

por esta hora

Dim hora As Date, DiaE As Date, DiaS As Date, TardeE As Date, TardeS As Date

Ya que de la forma que lo tenías definido, la única variable que era de Fecha era TardeS, todas las demás eran Variant y por lo tanto la comparación no era lo que estabas esperando.

De hecho yo lo probé con una función y me funciona bien, te la dejo por si te sirve:

Function Turno() As Integer
Dim hora As Date, DiaE As Date, DiaS As Date, TardeE As Date, TardeS As Date
hora = Format(Time, "h:mm AM/PM")
DiaE = Format("6:30", "h:mm AM/PM")
DiaS = Format("14:30", "h:mm AM/PM")
TardeE = Format("14:30", "h:mm AM/PM")
TardeS = Format("22:00", "h:mm AM/PM")
If hora >= DiaE And hora <= DiaS Then
    Turno = 2
        Else
        If hora >= TardeE And hora <= TardeS Then
        Turno = 3
            Else
                Turno = 1
        End If
End If
End Function

Muchísimas gracias Dante, me siento un poco tonto por ese error, no se porque tenia entendido que al declarar una variable dentro de la misma línea todas tomaban el mismo tipo de variable, en fin sigo aprendiendo, muchísimas gracias por tu ayuda.

Saludos!

Discúlpame Gustavo, no vi que me había respondido otra persona diferente, que pena.

Jaja, me alegro que te haya servido!

Respuesta
2

Puedes explicar con ejemplos qué tienes y qué esperas de resultado.

Claro que si Dante,

con la formula: =IF(AND(C2>=$AC$1,C2<$AD$1),1,IF(AND(C2>=$AC$2,C2<$AD$2),2,3))

lo que busco es que si la hora que esta en la celda "C2" esta entre "AC1" y "AD1" me devuelva 2, es decir sería el turno 2, pero si "C2" está dentro de "AC2" y "AD2" me devuelva 3, y lo que este fuera de ese rango sería igual a 1 (de 22 pm a 6:30 am).

Directo en la celda tal cual esta me funciona muy bien, sin embargo estoy automatizando algunos registros y quiero pasar ese dato en automatico, pero no logro replicarlo en código de vba para mostrarlo en el formulario.

algo similar sería esto:

6:30 - 14:30 = 2

14:30 - 22:00 =3

22:00 - 6:30 = 1

Espero haberme explicado, gracias.

Te paso otra opción. En ocasiones, no es necesario utilizar tantas variables:

Function Turno() As Integer
  Dim hora As Date
  hora = Time
  Select Case hora
    Case "6:30" To "14:30":   Turno = 2
    Case "14:30" To "22:00":  Turno = 3
    Case Else:                Turno = 1
  End Select
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas