Filtros y fechas: ¿imposible?

12/08/2005 - 21:03 por RHT | Informe spam
Saludos.
Desde hace varios días estoy tratando de finalizar una pequeña aplicación,
pero no lo he conseguido.
Necesito desesperadamente de su auxilio y consejo.

Se los trataré de explicar rápido.
Concentro registros desde muchos libros en uno solo. Los ordeno por fecha de
movimiento. Después muestro un Form con dos DTPickers, para que el usuario
indique el rango de fechas del reporte que desea. Entonces paso los valores
de los DTPickers al autofiltro del libro con los concentrados por VBA.
Error: Cero registros.

Al principio sufrí con la inversión de las fechas en los campos mes y dia,
por ejemplo, 01/08/05 se me volvía 08/01/05.
Use dateformat, dateserial, convertí las fechas a String y nada.
Entonces, cambié todas las fechas de los archivos origen a texto (y desde
luego las rutinas que los generan), para solo tener que pelear con texto.
Error: No se pueden filtrar rangos de fecha que estan en formato de
texto!

Por último: Cambié los formatos de los DTPickers a custom: 01/Ago/05.
Problema: sólo funciona si pongo la condición a O en vez de a Y.
Que quiero decir? Que si paso las fechas delimitadoras del rango deseado y
luego digo:

Selection.AutoFilter Field:, Criteria1:=">=" & Trim(Fecha_inicial_texto),
Operator:=xlAnd _
, Criteria2:="<=" & Trim(Fecha_final_texto)

(Porque tuve que pasar las fechas a texto, si no no me funcionaba)

En el autofiltro aparecen como: 01/07/05 [lo cual es correcto] y 04/Ago/05
[lo cual también es correcto pero tiene otro formato, por lo que hace
NADA!!]

En cambio si pongo:

Selection.AutoFilter Field:, Criteria1:=">=" & Trim(Fecha_inicial_texto),
Operator:=xlOr _
, Criteria2:="<=" & Trim(Fecha_final_texto)

En el autofiltro aparecen como: 01/Jul/05 [lo cual es perfectamente
correcto] y 04/Ago/05 [lo cual también es correcto pero como le dije O,
muestra un montón de registros que no necesito]

En pocas palabras, se cambia el formato de uno de los parámetros del
autofiltro si uso la condición Y, pasándolos por VBA.

Agradezco de antemano cualquier orientación.

Preguntas similare

Leer las respuestas

#6 RHT
13/08/2005 - 19:35 | Informe spam
Ok Carlitos.
Me despejaré y trataré mas tarde


"Carlos Durán Urenda" escribió en el mensaje
news:%
la verdad no se, yo lo probe tal como te lo pase y se me funciono, al
parecer debe pasar la fecha al formato ingles, la ventana del autofiltro
lo muestra de acuerdo a la configuracion regional del equipo, pero en
realidad la operacion la debe hacer con fechas en formato ingles

posiblemente sea que ya le dediscaste mucho tiempo y el detalle es una
pequeñés que puedas ver cuando te despejes

Bye

"RHT" escribió en el mensaje
news:
Muchas gracias Carlos por tu pronta respuesta

Creo que no funciona.
Pongo las fechas incial y final como 04/Jul/05 y 02/ago/05
y en el filtro me aparece

07/04/05 [mal] y 02/Ago/05 [bien]

Que podrá ser?

"Carlos Durán Urenda" escribió en el mensaje
news:
Prueba con ...

Selection.AutoFilter Field:, Criteria1:=">=" &
Format(Fecha_inicial_texto, "MM/dd/yy"), Operator:=xlAnd _
, Criteria2:="<=" & Format(Fecha_final_texto,"MM/dd/yy")



y me dices

Saludos
Carlos Durán




"RHT" escribió en el mensaje
news:
Saludos.
Desde hace varios días estoy tratando de finalizar una pequeña
aplicación, pero no lo he conseguido.
Necesito desesperadamente de su auxilio y consejo.

Se los trataré de explicar rápido.
Concentro registros desde muchos libros en uno solo. Los ordeno por
fecha de movimiento. Después muestro un Form con dos DTPickers, para
que el usuario indique el rango de fechas del reporte que desea.
Entonces paso los valores de los DTPickers al autofiltro del libro con
los concentrados por VBA. Error: Cero registros.

Al principio sufrí con la inversión de las fechas en los campos mes y
dia, por ejemplo, 01/08/05 se me volvía 08/01/05.
Use dateformat, dateserial, convertí las fechas a String y nada.
Entonces, cambié todas las fechas de los archivos origen a texto (y
desde luego las rutinas que los generan), para solo tener que pelear
con texto. Error: No se pueden filtrar rangos de fecha que estan en
formato de texto!

Por último: Cambié los formatos de los DTPickers a custom: 01/Ago/05.
Problema: sólo funciona si pongo la condición a O en vez de a Y.
Que quiero decir? Que si paso las fechas delimitadoras del rango
deseado y luego digo:

Selection.AutoFilter Field:, Criteria1:=">=" &
Trim(Fecha_inicial_texto), Operator:=xlAnd _
, Criteria2:="<=" & Trim(Fecha_final_texto)

(Porque tuve que pasar las fechas a texto, si no no me funcionaba)

En el autofiltro aparecen como: 01/07/05 [lo cual es correcto] y
04/Ago/05 [lo cual también es correcto pero tiene otro formato, por lo
que hace NADA!!]

En cambio si pongo:

Selection.AutoFilter Field:, Criteria1:=">=" &
Trim(Fecha_inicial_texto), Operator:=xlOr _
, Criteria2:="<=" & Trim(Fecha_final_texto)

En el autofiltro aparecen como: 01/Jul/05 [lo cual es perfectamente
correcto] y 04/Ago/05 [lo cual también es correcto pero como le dije O,
muestra un montón de registros que no necesito]

En pocas palabras, se cambia el formato de uno de los parámetros del
autofiltro si uso la condición Y, pasándolos por VBA.

Agradezco de antemano cualquier orientación.















Respuesta Responder a este mensaje
#7 RHT
13/08/2005 - 19:37 | Informe spam
Gracias Lc.
Agradezco la molestia que te has tomado en contestar.
La verdad es que es buena la idea de separar la fecha para trabajar con
filtros.
Saludos desde MX


"LC" escribió en el mensaje
news:
Te tengo una solucion bien sencilla

Segun entiendo tu problema es que se intercambian el mes y el dia...

Puedes tomar la fecha y con las funciones DIA() MES() y AÑO () puedes
abrirla en tres celdas en el orden que tu decidas. por ejemplo

A1= "14/07/04" B1=DIA(A1) C1=MES(A1) C3=AÑO(A1)

Ahora tienes 3 celdas que representan la misma fecha.

Bueno tratre de entender lo que comentas en el codigo pero aun estoy muy
newbie con eso, de todas formas en mi experiencia con una aplicacion que
tambien estoy haciendo se me facilito mucho cuando ya no trabaje con
fechas,
si no con la ternas que se producen al separarlas asi.

Por lo menos de esa forma tendras la seguridad de que no se invertiran los
numeros.

Puede dar risa este consejo, pero bueno la intencion solo es ayudar

Chaito



"RHT" escribió:

Saludos.
Desde hace varios días estoy tratando de finalizar una pequeña
aplicación,
pero no lo he conseguido.
Necesito desesperadamente de su auxilio y consejo.

Se los trataré de explicar rápido.
Concentro registros desde muchos libros en uno solo. Los ordeno por fecha
de
movimiento. Después muestro un Form con dos DTPickers, para que el
usuario
indique el rango de fechas del reporte que desea. Entonces paso los
valores
de los DTPickers al autofiltro del libro con los concentrados por VBA.
Error: Cero registros.

Al principio sufrí con la inversión de las fechas en los campos mes y
dia,
por ejemplo, 01/08/05 se me volvía 08/01/05.
Use dateformat, dateserial, convertí las fechas a String y nada.
Entonces, cambié todas las fechas de los archivos origen a texto (y desde
luego las rutinas que los generan), para solo tener que pelear con texto.
Error: No se pueden filtrar rangos de fecha que estan en formato de
texto!

Por último: Cambié los formatos de los DTPickers a custom: 01/Ago/05.
Problema: sólo funciona si pongo la condición a O en vez de a Y.
Que quiero decir? Que si paso las fechas delimitadoras del rango deseado
y
luego digo:

Selection.AutoFilter Field:, Criteria1:=">=" &
Trim(Fecha_inicial_texto),
Operator:=xlAnd _
, Criteria2:="<=" & Trim(Fecha_final_texto)

(Porque tuve que pasar las fechas a texto, si no no me funcionaba)

En el autofiltro aparecen como: 01/07/05 [lo cual es correcto] y
04/Ago/05
[lo cual también es correcto pero tiene otro formato, por lo que hace
NADA!!]

En cambio si pongo:

Selection.AutoFilter Field:, Criteria1:=">=" &
Trim(Fecha_inicial_texto),
Operator:=xlOr _
, Criteria2:="<=" & Trim(Fecha_final_texto)

En el autofiltro aparecen como: 01/Jul/05 [lo cual es perfectamente
correcto] y 04/Ago/05 [lo cual también es correcto pero como le dije O,
muestra un montón de registros que no necesito]

En pocas palabras, se cambia el formato de uno de los parámetros del
autofiltro si uso la condición Y, pasándolos por VBA.

Agradezco de antemano cualquier orientación.




Respuesta Responder a este mensaje
#8 RHT
13/08/2005 - 19:39 | Informe spam
Hector.
Tu solución me ha resuelto el problema!
Te aseguro que probé de todo, como ya comenté y nada había funcionado.
Espero, algún día dentro de mucho tiempo, poder tener tus conocimientos.
Gracias!!!

"Héctor Miguel" escribió en el mensaje
news:
hola, RHT !

... registros... ordeno por fecha... muestro un Form con dos DTPickers,
para... el rango de fechas del reporte
... paso los valores de los DTPickers al autofiltro... por VBA. Error:
Cero registros
... sufri con la inversion de las fechas en los campos mes y dia, por
ejemplo, 01/08/05 se me volvia 08/01/05.
... dateformat, dateserial, converti las fechas a String y nada.
... cambie... las fechas de los archivos... a texto (y... las rutinas que
los generan), para solo tener que pelear con texto. Error: No se pueden
filtrar rangos de fecha que estan en formato de texto!
... Cambie los formatos de los DTPickers a custom: 01/Ago/05. Problema:
solo funciona si pongo la condicion a O en vez de a Y.
... si paso las fechas delimitadoras del rango deseado y luego digo:
Selection.AutoFilter Field:, Criteria1:=">=" &
Trim(Fecha_inicial_texto), Operator:=xlAnd _
, Criteria2:="<=" & Trim(Fecha_final_texto)
En el autofiltro aparecen como: 01/07/05 [lo cual es correcto]
y 04/Ago/05 [lo cual tambien es correcto pero tiene otro formato, por lo
que hace NADA!!] [...]



1) [seguramente] tu configuracion regional utiliza un formato/secuencia de
fecha [p.e.] d/m/aa
2) puesto que vba ES 'US-Centric'... los formatos de fecha 'los /toma/lee'
con el orden m/d/aa
3) considerando que los DTPicker 'asumen/presentan' el orden de fecha
establecido en la configuracion regional del equipo...
y... [que 'a final de cuentas'] las fechas SON numeros 'enteros' [en
tanto no sean de relevancia las 'fracciones' u horas]...
[posible 'solucion'] -> 'convierte' a un tipo de datos Long ->
directamente los DTPicker -> en el codigo de los autofiltros ;)
-> el siguiente ejemplo me ha funcionado perfectamente... incluso
alternando el orden de fecha en la configuracion regional...
[... otras lineas de tu codigo ...]
If Range("a1").AutoFilter Then Range("a1").AutoFilter
Range("a1").AutoFilter _
Field:, Criteria1:=">=" & CLng(DTPicker1), _
Operator:=xlAnd, _
Criteria2:="<=" & CLng(DTPicker2)
[... otras lineas de tu codigo ...]

si cualquier duda... comentas?
saludos,
hector.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida