comparacion con fechas y horas en procedimiento

07/01/2006 - 11:26 por Rantamplan | Informe spam
Buenas grupo,
llevo unos dias liado con una aplicación que ya empieza a desquiciarme,
os cuento:

En una hoja, tengo 24 columnas (D:AA) que equivalen a las 24 horas del
dia.
En otra celda tengo un valor que va cambiando cada minuto y ese valor se
va copiando en la celda y columna que le corresponda según la hora del
sistema.
Por ejemplo, si son las 11:18, se copiaría el valor en la celda nº18 de
la columna correspondiente a las 11 de la mañana.
El problema radica en que se ejecuta todo el proceso de forma correcta
excepto para las dos ultimas columnas:
- Columna Z y Columna AA
Estas dos columnas son ignoradas, no escribe nada en esas dos horas.
Creo que estoy metiendo la pata en las comparaciones que hago dentro del
procedimiento. A ver si alguien puede confirmar mi metedura de pata.

Os copio el procedimiento:

- inicio copya&paste

Private Sub Worksheet_Change(ByVal Target As Range)

Dim miHora
Dim minuto
Dim aux As String
miHora = Format(Time, "hh:mm AM/PM")
minuto = Minute(miHora)

If minuto = 0 Then
minuto = 60
End If
minuto = CStr(minuto)

If Intersect(Target, Me.[b63]) Is Nothing Then Exit Sub

With WorksheetFunction

If (miHora > #1:00:00 AM#) And (miHora <= #2:01:00 AM#) Then
If .CountA(Me.[d1:d60]) = 60 Then
Else
aux = "d" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #2:00:00 AM#) And (miHora <= #3:01:00 AM#) Then
If .CountA(Me.[e1:e60]) = 60 Then
Else
aux = "e" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #3:00:00 AM#) And (miHora <= #4:01:00 AM#) Then
If .CountA(Me.[f1:f60]) = 60 Then
Else
aux = "f" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #4:00:00 AM#) And (miHora <= #5:01:00 AM#) Then
If .CountA(Me.[g1:g60]) = 60 Then
Else
aux = "g" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #5:00:00 AM#) And (miHora <= #6:01:00 AM#) Then
If .CountA(Me.[h1:h60]) = 60 Then
Else
aux = "h" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #6:00:00 AM#) And (miHora <= #7:01:00 AM#) Then
If .CountA(Me.[i1:i60]) = 60 Then
Else
aux = "i" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #7:00:00 AM#) And (miHora <= #8:01:00 AM#) Then
If .CountA(Me.[j1:j60]) = 60 Then
Else
aux = "j" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #8:00:00 AM#) And (miHora <= #9:01:00 AM#) Then
If .CountA(Me.[k1:k60]) = 60 Then
Else
aux = "k" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #9:00:00 AM#) And (miHora <= #10:01:00 AM#) Then
If .CountA(Me.[L1:L60]) = 60 Then
Else
aux = "l" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #10:00:00 AM#) And (miHora <= #11:01:00 AM#)
Then
If .CountA(Me.[m1:m60]) = 60 Then
Else
aux = "m" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #11:00:00 AM#) And (miHora <= #12:01:00 PM#)
Then
If .CountA(Me.[n1:n60]) = 60 Then
Else
aux = "n" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #12:00:00 PM#) And (miHora <= #1:01:00 PM#) Then
If .CountA(Me.[o1:o60]) = 60 Then
Else
aux = "o" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #1:00:00 PM#) And (miHora <= #2:01:00 PM#) Then
If .CountA(Me.[p1:p60]) = 60 Then
Else
aux = "p" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #2:00:00 PM#) And (miHora <= #3:01:00 PM#) Then
If .CountA(Me.[q1:q60]) = 60 Then
Else
aux = "q" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #3:00:00 PM#) And (miHora <= #4:01:00 PM#) Then
If .CountA(Me.[r1:r60]) = 60 Then
Else
aux = "r" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #4:00:00 PM#) And (miHora <= #5:01:00 PM#) Then
If .CountA(Me.[s1:s60]) = 60 Then
Else
aux = "s" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #5:00:00 PM#) And (miHora <= #6:01:00 PM#) Then
If .CountA(Me.[t1:t60]) = 61 Then
Else
aux = "t" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #6:00:00 PM#) And (miHora <= #7:01:00 PM#) Then
If .CountA(Me.[u1:u61]) = 61 Then
Else
aux = "u" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #7:00:00 PM#) And (miHora <= #8:01:00 PM#) Then
If .CountA(Me.[v1:v61]) = 61 Then
Else
aux = "v" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #8:00:00 PM#) And (miHora <= #9:01:00 PM#) Then
If .CountA(Me.[w1:w61]) = 61 Then
Else
aux = "w" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #9:00:00 PM#) And (miHora < #10:01:00 PM#) Then
If .CountA(Me.[x1:x60]) = 61 Then
Else
aux = "x" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #10:00:00 PM#) And (miHora < #11:01:00 PM#) Then
If .CountA(Me.[y1:y60]) = 60 Then
Else
aux = "y" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
'--
' a partir de aqui no se ejecuta el codigo
'--
ElseIf (miHora > #11:00:00 PM#) And (miHora <= #12:01:00 AM#)
Then
If .CountA(Me.[z1:z60]) = 60 Then
Else
aux = "z" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #12:00:00 AM#) And (miHora <= #1:01:00 AM#) Then
If .CountA(Me.[aa1:aa60]) = 60 Then
Else
aux = "aa" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
End If

End With

End Sub

- fin copya&paste

gracias anticipadas y Salu2!.


"los videojuegos no tienen ninguna influencia sobre los niños. Quiero
decir, si el Pac-Man hubiese
influenciado a nuestra generación, estaríamos todos corriendo en salas
oscuras, masticando píldoras
mágicas y escuchando músicas electrónicas repetitivas".
Kristian Wilson, Nintendo Inc., 1989
 

Leer las respuestas

#1 KL
07/01/2006 - 22:35 | Informe spam
Hola Rantamplan,

No se si te he entendido bien, pero prueba esto:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B63]) Is Nothing Then Exit Sub
Dim miHora As Integer, miMinuto As Integer
miHora = Hour(Time): miMinuto = Minute(Time)
Cells(miMinuto, miHora + 4) = [b63]
End Sub

o bien

Private Sub Worksheet_Change(ByVal Target As Range)
Dim miHora As Integer, miMinuto As Integer
miHora = Hour(Time): miMinuto = Minute(Time)
Application.EnableEvents = False
Cells(miMinuto, miHora + 4) = [B63]
Application.EnableEvents = True
End Sub

Saludos,
KL


"Rantamplan" wrote in message news:
Buenas grupo,
llevo unos dias liado con una aplicación que ya empieza a desquiciarme,
os cuento:

En una hoja, tengo 24 columnas (D:AA) que equivalen a las 24 horas del
dia.
En otra celda tengo un valor que va cambiando cada minuto y ese valor se
va copiando en la celda y columna que le corresponda según la hora del
sistema.
Por ejemplo, si son las 11:18, se copiaría el valor en la celda nº18 de
la columna correspondiente a las 11 de la mañana.
El problema radica en que se ejecuta todo el proceso de forma correcta
excepto para las dos ultimas columnas:
- Columna Z y Columna AA
Estas dos columnas son ignoradas, no escribe nada en esas dos horas.
Creo que estoy metiendo la pata en las comparaciones que hago dentro del
procedimiento. A ver si alguien puede confirmar mi metedura de pata.

Os copio el procedimiento:

- inicio copya&paste

Private Sub Worksheet_Change(ByVal Target As Range)

Dim miHora
Dim minuto
Dim aux As String
miHora = Format(Time, "hh:mm AM/PM")
minuto = Minute(miHora)

If minuto = 0 Then
minuto = 60
End If
minuto = CStr(minuto)

If Intersect(Target, Me.[b63]) Is Nothing Then Exit Sub

With WorksheetFunction

If (miHora > #1:00:00 AM#) And (miHora <= #2:01:00 AM#) Then
If .CountA(Me.[d1:d60]) = 60 Then
Else
aux = "d" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #2:00:00 AM#) And (miHora <= #3:01:00 AM#) Then
If .CountA(Me.[e1:e60]) = 60 Then
Else
aux = "e" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #3:00:00 AM#) And (miHora <= #4:01:00 AM#) Then
If .CountA(Me.[f1:f60]) = 60 Then
Else
aux = "f" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #4:00:00 AM#) And (miHora <= #5:01:00 AM#) Then
If .CountA(Me.[g1:g60]) = 60 Then
Else
aux = "g" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #5:00:00 AM#) And (miHora <= #6:01:00 AM#) Then
If .CountA(Me.[h1:h60]) = 60 Then
Else
aux = "h" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #6:00:00 AM#) And (miHora <= #7:01:00 AM#) Then
If .CountA(Me.[i1:i60]) = 60 Then
Else
aux = "i" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #7:00:00 AM#) And (miHora <= #8:01:00 AM#) Then
If .CountA(Me.[j1:j60]) = 60 Then
Else
aux = "j" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #8:00:00 AM#) And (miHora <= #9:01:00 AM#) Then
If .CountA(Me.[k1:k60]) = 60 Then
Else
aux = "k" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #9:00:00 AM#) And (miHora <= #10:01:00 AM#) Then
If .CountA(Me.[L1:L60]) = 60 Then
Else
aux = "l" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #10:00:00 AM#) And (miHora <= #11:01:00 AM#)
Then
If .CountA(Me.[m1:m60]) = 60 Then
Else
aux = "m" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #11:00:00 AM#) And (miHora <= #12:01:00 PM#)
Then
If .CountA(Me.[n1:n60]) = 60 Then
Else
aux = "n" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #12:00:00 PM#) And (miHora <= #1:01:00 PM#) Then
If .CountA(Me.[o1:o60]) = 60 Then
Else
aux = "o" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #1:00:00 PM#) And (miHora <= #2:01:00 PM#) Then
If .CountA(Me.[p1:p60]) = 60 Then
Else
aux = "p" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #2:00:00 PM#) And (miHora <= #3:01:00 PM#) Then
If .CountA(Me.[q1:q60]) = 60 Then
Else
aux = "q" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #3:00:00 PM#) And (miHora <= #4:01:00 PM#) Then
If .CountA(Me.[r1:r60]) = 60 Then
Else
aux = "r" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #4:00:00 PM#) And (miHora <= #5:01:00 PM#) Then
If .CountA(Me.[s1:s60]) = 60 Then
Else
aux = "s" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #5:00:00 PM#) And (miHora <= #6:01:00 PM#) Then
If .CountA(Me.[t1:t60]) = 61 Then
Else
aux = "t" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #6:00:00 PM#) And (miHora <= #7:01:00 PM#) Then
If .CountA(Me.[u1:u61]) = 61 Then
Else
aux = "u" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #7:00:00 PM#) And (miHora <= #8:01:00 PM#) Then
If .CountA(Me.[v1:v61]) = 61 Then
Else
aux = "v" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #8:00:00 PM#) And (miHora <= #9:01:00 PM#) Then
If .CountA(Me.[w1:w61]) = 61 Then
Else
aux = "w" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #9:00:00 PM#) And (miHora < #10:01:00 PM#) Then
If .CountA(Me.[x1:x60]) = 61 Then
Else
aux = "x" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #10:00:00 PM#) And (miHora < #11:01:00 PM#) Then
If .CountA(Me.[y1:y60]) = 60 Then
Else
aux = "y" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
'--
' a partir de aqui no se ejecuta el codigo
'--
ElseIf (miHora > #11:00:00 PM#) And (miHora <= #12:01:00 AM#)
Then
If .CountA(Me.[z1:z60]) = 60 Then
Else
aux = "z" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
ElseIf (miHora > #12:00:00 AM#) And (miHora <= #1:01:00 AM#) Then
If .CountA(Me.[aa1:aa60]) = 60 Then
Else
aux = "aa" + minuto
Me.Range(aux).Value = Me.[b63].Value
End If
End If

End With

End Sub

- fin copya&paste

gracias anticipadas y Salu2!.


"los videojuegos no tienen ninguna influencia sobre los niños. Quiero
decir, si el Pac-Man hubiese
influenciado a nuestra generación, estaríamos todos corriendo en salas
oscuras, masticando píldoras
mágicas y escuchando músicas electrónicas repetitivas".
Kristian Wilson, Nintendo Inc., 1989

Preguntas similares