Excel - Comparar horas en vba (celda y UserForm)

 
Vista:
sin imagen de perfil

Comparar horas en vba (celda y UserForm)

Publicado por Alx (31 intervenciones) el 27/03/2016 22:19:04
Socorro otra vez (soy novato con vba)

Tengo un UserForm donde introduzco una hora, y la comparo con una columna de celdas
No logro que entre en el bucle...

v_inicio es una hora introducida en un TextBox definida como Date
lo que hago es recorrer toda una columna (con formato de hora), y cuando encuentre la coincidencia que haga el resto (rellenar otras celdas)
He probado con CDate, a convertirlo con Time... y nada.
Donde estoy metiendo la pata?

1
2
3
4
5
6
7
8
9
10
11
12
For x = 4 To 1444
 
    If Cells(x, 8).Value = v_inicio Then
'        MsgBox "fila " & x & " columna " & columna
 
        For y = x To v_duracion
           Cells(y, columna).Value = 1
        Next y
 
    End If
 
Next x

Justo antes del "if Cells", he puesto un MsgBox para que me muestre el contenido, y tanto la celda como v_inicio, coinciden, al menos visualmente, pero por alguna razon, la comparacion es erronea.

Añado el codigo completo (lo demas funciona bien, aunque acepto sugerencias que seguro que es mejorable)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Dim fila As Long
Dim v_fecha As Date
Dim v_duracion As Date
Dim v_fin As Date
Dim v_inicio As Date
 
 
Private Sub Cb_aceptar_Click()
 
'Obtener la fila disponible
fila = Application.WorksheetFunction.CountA(Range("B:B")) + 4
 
 
    'Insertar datos capturados
    Cells(fila, 2).Value = CDate(v_fecha)
    Cells(fila, 3).Value = UserForm1.f_inicio.Value
    Cells(fila, 4).Value = UserForm1.f_fin.Value
    Cells(fila, 5).Value = UserForm1.f_duracion.Value
 
    'Limpiar cajas de texto
    UserForm1.f_fecha.Value = ""
    UserForm1.f_inicio.Value = ""
    UserForm1.f_fin.Value = ""
    UserForm1.f_duracion.Value = ""
 
    'El mogollon
columna = Application.WorksheetFunction.CountA(Range("L2:BB2")) + 11
 
 
For x = 4 To 1444
 
    If Cells(x, 8).Value = v_inicio Then
'        MsgBox "fila " & x & " columna " & columna
 
        For y = x To v_duracion
           Cells(y, columna).Value = 1
        Next y
 
    End If
 
Next x
 
End Sub
 
Private Sub Cb_cancelar_Click()
Unload Me
End Sub
 
Private Sub f_fecha_Enter()
v_fecha = Format(Now, "dd/mm/yy")
UserForm1.f_fecha.Value = v_fecha
End Sub
 
Private Sub f_fin_AfterUpdate()
    v_inicio = UserForm1.f_inicio.Value
    v_fin = UserForm1.f_fin.Value
    v_duracion = v_fin - v_inicio
    UserForm1.f_duracion.Value = v_duracion
 
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Comparar horas en vba (celda y UserForm)

Publicado por Andres Leonardo (1583 intervenciones) el 28/03/2016 20:39:23
La pregunta no deberia estar dentro de los dos for... y no afuera.....

1
2
3
4
5
6
7
8
For x = 4 To 1444
        For y = x To v_duracion
                 If Cells(x, 8).Value = v_inicio Then
                         '        MsgBox "fila " & x & " columna " & columna
                 Cells(y, columna).Value = 1
        Next y
 
    End If
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Comparar horas en vba (celda y UserForm)

Publicado por Alx (31 intervenciones) el 28/03/2016 21:03:46
Hola Andres...

No. La pregunta es correcta ahi.Estoy comparando el valor del texBox con cada celda que referencio en el primer bucle.

Estoy recorriendo una columna que contiene horas (primer bucle), y cuando la encuentro, me desplazo x columnas y empiezo a rellenar con el segundo bucle.

Como dije, si pongo un MshBox que me devuelva los valores, los "veo" bien (00:10 00:10 el primero lo lee de la celda al encontrarla y el segundo es el introducido en el TexBox pasado a la variable v_inicio), sin embargo, o no acaba de entrar en el bucle, o me devuelve un error 13 de tipos de variable, de ahi que hiciera pruebas com Cdtae, Timevalue, y todas las que se me ocurrieron... sin exito (insisto, esta debe ser mi tercera y pobre incursion en vba).

Intentare "limpiar" un poco el xls porque lo tengo lleno de pruebas de otras cosas y lo subire...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Comparar horas en vba (celda y UserForm)

Publicado por Alx (31 intervenciones) el 28/03/2016 21:31:17
Aqui esta el libro...

Lo que pretendo:

Introduzco una fecha, una hora de inicio y una de final en un UserForm
Busca la primera posicion libre en las primeras columnas (A a D), y se insertan ahi los datos.

Hasta aqui funciona.

Segunda parte (lo que falla):
Pretendo que a la vez, me rellene desde la posicion/fila correspondiente a la hora de inicio (columna G) y la columna del dia correspondiente, tantas celdas hacia abajo, como indique la diferencia entre la hora de fin y la de inicio, con "1".

No se si me explico...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de andres
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Comparar horas en vba (celda y UserForm)

Publicado por andres (1583 intervenciones) el 29/03/2016 02:48:45
no has subido el luibro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Comparar horas en vba (celda y UserForm)

Publicado por Andres Leonardo (1583 intervenciones) el 29/03/2016 16:04:46
Intenta con este cambie la linea para comparar los formatos avisame... qeu tal te va.

1
2
3
4
5
6
7
8
9
10
11
12
For x = 4 To 1444
 
   If (Format(Cells(x, 8).Value, "hh:mm:ss") = Format(v_inicio, "hh:mm:ss")) Then  'esta reemplace.....
'        MsgBox "fila " & x & " columna " & columna
 
        For y = x To v_duracion
           Cells(y, columna).Value = 1
        Next y
 
    End If
 
Next x
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Comparar horas en vba (celda y UserForm)

Publicado por Alx (31 intervenciones) el 29/03/2016 19:06:40
No funciona... he probado a poner un MsgBox y formatea bien las horas, pero no me entra en el bucle... :(


cells
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Comparar horas en vba (celda y UserForm)

Publicado por Alx (31 intervenciones) el 30/03/2016 00:17:08
Muchisimas gracias por tu ayuda Andres.

Ahora ya funciona perfecto, incluso la busqueda de la columna fecha correspondiente (he ido mas alla) :)

Seguire añadiendo funcionalidades, asi que seguiran surgiendo dudas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Comparar horas en vba (celda y UserForm)

Publicado por Andres Leonardo (1583 intervenciones) el 30/03/2016 00:20:37
Excelente
me alegro ... si puedo con gusto te ayudo

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comparar horas en vba (celda y UserForm)

Publicado por Palta (1 intervención) el 21/02/2023 03:26:33
Hola, podrías subir cómo te quedó el código al final por favor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comparar horas en vba (celda y UserForm)

Publicado por JuanC (1237 intervenciones) el 29/03/2016 19:15:03
asegurate que v_inicio se inicie correctamente (poné un punto de interrupción y depurá paso a paso)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar