Filtrar fecha por macro VBA - problema de formato
Resuelto
Sailorbop
-
Riaolle -
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!
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
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:
Es un poco rebuscado... ¡Pero funciona!!!
++
Juan's
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
Para utilizar una fecha, personalmente lo hago así y no me aburro
FechaParaElFiltro = format(UnaFecha, "#")
FechaParaElFiltro = format(UnaFecha, "#")
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:
Disfruta
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
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:
Papou
Tu código sería entonces:
Selection.AutoFilter Field:=1, Criteria1:=(">=" & CDate(TextBox1.Value)), Operator:=xlAnd, Criteria2:=("<=" & CDate(TextBox2.Value)) Papou
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!
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!
Buenas noches sailorbop,
Para recuperar textos en forma de fecha, simplemente hay que convertir los contenidos de la siguiente manera:
Saludos cordiales.
Papou
Para recuperar textos en forma de fecha, simplemente hay que convertir los contenidos de la siguiente manera:
CDate(TextBox1.Value)
Saludos cordiales.
Papou
¡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) !!
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) !!
¡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)