Filtrar fecha por macro VBA - problema de formato

Resuelto
Sailorbop -  
 Riaolle -
VBA - Excel
Hola a todos,
(encontré respuestas pero ya las he probado sin éxito)

Quisiera hacer una macro para filtrar entre dos fechas, cuyas valores se encuentran ya sea en 2 celdas o en 2 textbox...

El problema es que incluso indicando el formato, Excel filtra invirtiendo el mes y el día.

Por ejemplo:
Selection.AutoFilter Field:=1, Criteria1:=">=" & Format(TextBox1, "dd/mm/yy"), Operator:=xlAnd, Criteria2:="<=" & TextBox2

Fecha inscrita en textbox1 = 06/02/07 envía el criterio 02/06/2007
Fecha inscrita en textbox2 = 10/02/07 envía el criterio 02/10/2007

Lo peor es que si doy como criterio :

Criteria1:= Format(TextBox1, "dd/mm/yy"), Operator:=xlOr, Criteria2:=TextBox2

¡Y bien, ahí... funciona!
Nota que omití Format(textbox2...) y no tengo diferencia.

¡Muchas gracias!
Configuración: Windows XP Internet Explorer 6.0

9 respuestas

Juan's
 
He luchado durante horas para encontrarlo!!!

Hay un pequeño truco para que funcione.
Debes formatear la fecha en VBA (dd/mm/yyyy) y luego transformarla en número a través de cuadros de texto de transición

13/05/2007 = 39215 en VBA y Excel

En el ejemplo a continuación, quiero filtrar mi columna (n°4, es decir, D) entre 2 fechas:
- fecha de inicio = TextBox1 (formato dd/mm/yyyy)
- fecha de fin = TextBox2 (formato dd/mm/yyyy)

- fecha de inicio = TextBox3 (formato numérico)
- fecha de fin = TextBox4 (formato numérico)

Debes llenar los TextBox 1 y 2.
Los 3 y 4 solo sirven como transición en el UserForm

Aquí está el código:

'===== INICIO ELECCIÓN DEL PERÍODO 'rango de fechas startdate = CDate(Format(TextBox1.Value, "dd/mm/yyyy")) enddate = CDate(Format(TextBox2.Value, "dd/mm/yyyy")) 'TRANSFORMACIÓN NUMÉRICA DE LA FECHA Dim startdate2 As Single startdate2 = startdate TextBox3.Value = startdate2 Dim enddate2 As Single enddate2 = enddate TextBox4.Value = enddate2 'INICIO DEL FILTRO ============ Selection.AutoFilter Field:=4, Criteria1:=">=" & TextBox3.Value, Operator:=xlAnd, Criteria2:="<=" & TextBox4.Value '+++++ FIN ELECCIÓN DEL PERÍODO 


Es un poco rebuscado... ¡Pero funciona!!!

++
Juan's
15
redaiwa Mensajes publicados 370 Estado Miembro 119
 
Salam Juan's.
¡Qué pena que solo pueda darte un punto, porque mereces al menos 10!
Ciertamente ayudaste a "Sailorbop", pero en realidad no dejas de ayudar a miles de personas incluso hoy... incluyéndome a mí :)
"La buena palabra es como un hermoso árbol cuya raíz es firme y sus ramas se elevan hacia el cielo, dando en todo momento sus frutos" (Corán)
0
Jeanno
 
¡Muchas gracias, pero muchísimo!
0
qui qu'ou
 
Super, gracias
0
david_wklw
 
Para utilizar una fecha, personalmente lo hago así y no me aburro

FechaParaElFiltro = format(UnaFecha, "#")
8
UnknownVBA
 
La respuesta aquí para los angloparlantes:
http://www.ozgrid.com/VBA/autofilter-vba-dates.htm

Para los anglofobos:
El problema surge por el formato de fecha no estadounidense. Para solucionarlo, es necesario transformar la fecha en una variable "long" utilizando la función "DateSerial".

El código a continuación:

Dim dDate As Date Dim lDate As Long dDate = DateSerial(Year(dDate), Month(dDate), Day(dDate)) lDate = dDate Range("A1").AutoFilter Field:=1 Criteria1:=">" & lDate


Disfruta
3
Riaolle
 
¡Es perfecto!
0
Papou
 
PS: la función CDate convierte las fechas al formato predeterminado de Windows. Por lo tanto, no es necesario aplicarles el formato "dd/mm/yy".

Tu código sería entonces:

Selection.AutoFilter Field:=1, Criteria1:=(">=" & CDate(TextBox1.Value)), Operator:=xlAnd, Criteria2:=("<=" & CDate(TextBox2.Value))


Papou
1
Juan's
 
Sí, pero el filtro no funciona en ese caso.
Es necesario transformar la fecha en número como se indica arriba.
0
sailorbop Mensajes publicados 2 Estado Miembro 1
 
JUAN'S
Con tu código, descubrí que también funcionaba de esta manera (un poco más simple):
=> De hecho, no paso por los textbox3 y 4, y filtro directamente en la columna de fecha (no entendí del todo por qué funciona porque soy un desastre en VBA, pero bueno...):

Private Sub CommandButton1_Click()

Dim a As Single
Dim b As Single

a = CDate(TextBox1)
b = CDate(TextBox2)

Selection.AutoFilter Field:=1, Criteria1:=">=" & a, Operator:=xlAnd, Criteria2:="<=" & b

End Sub

(NB se bloquea si no se introduce nada en un textbox, pero bueno, es un pequeño detalle que se puede añadir)

¡Gracias de nuevo!
1
sailorbop Mensajes publicados 2 Estado Miembro 1
 
¡Hola de nuevo!!
¿Alguien que tenga una idea pequeña?? ¡Gracias de antemano!
0
Papou
 
Buenas noches sailorbop,

Para recuperar textos en forma de fecha, simplemente hay que convertir los contenidos de la siguiente manera:

CDate(TextBox1.Value)


Saludos cordiales.

Papou
0
Sailor
 
¡Muchas gracias!
Entonces, de manera extraña para aquellos que lo han probado: una fecha funciona, dos fechas no funcionan excepto... para fechas del 01/01/200xx... (1 de enero de los años seleccionados).

Creo que es un problema de traducción de EE. UU. => FR.

¡Gracias de nuevo! Y disculpa por la confusión :o) !!
0
Victor
 
Hola,

Estoy compilando una pequeña macro para el trabajo en Excel 2007.
Para esta macro de filtro automático, la última línea de mi archivo base está fuera del tiempo ignorada, ¿tiene alguna solución para que se tenga en cuenta?
0