Turbo Filtro - Problema con fecha
Buenas noches !!
Estoy tratando de realizar un filtro por fecha "desde-Hasta" y me salta error me muestra todo los datos sin filtrar o no me muestra ningún dato. Puede ser que al comparar tenga que cambiar el formato?
Aguardo vuestra sugerencia.
gracias.
saludos
Juan
1 Respuesta
El filtro es con la validación o con el autofiltro, si las fechas en la hoja están en formato fecha y la fecha de filtro, también es fecha, no deberías tener ningún problema.
Mándame unos ejemplos de tu hoja para revisarlos.
Saludos. Dam
Adam, buenas noches!
Otra vez mucha gracias por tu predisposición y tu tiempo!!
La macro es la sig:
Private Sub TextBox1_Change()
'textbox1 - fecha desde
Sheets("base").Activate
Sheets("base").Range("a1").Select
ListBox1.RowSource = Empty
Sheets("hoja3").Range("A:c").ClearContents
Sheets("base").Range("E2:G2").ClearContents
ListBox1.ColumnWidths = "40;100;60"
Sheets("base").Range("E2") = "*" & TextBox1 & "*"
Range("a1:c1000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
ListBox1.RowSource = "hoja3!a2:c1000"
End Sub
Private Sub TextBox2_Change()
'textbox 2 - hasta<br class="scayt-auto" data-scayt_autocorrection="aquí" data-scayt_autocorrected="aqui" />Sheets("base").Activate
Sheets("base").Range("a1").Select
ListBox1.RowSource = Empty
Sheets("hoja3").Range("A:c").ClearContents
Sheets("base").Range("E2:G2").ClearContents
ListBox1.ColumnWidths = "40;100;60"
Sheets("base").Range("F2") = "*" & TextBox2 & "*"
Range("a1:c1000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"F1:F2"), copytorange:=Sheets("hoja3").Range("a1"), Unique:=False
ListBox1.RowSource = "hoja3!a2:c1000"
End Sub
saludos
Juan
Adam,
En esta parte tendría que cambiar el formato del textbox1 ? para que se utilice para ingresar los datos en el textbox como dd/mm/yy..
Sheets("base").Range("E2") = "*" & TextBox1 & "*"
Aguardo vuestra sugerencia.
saludos
Juan
Revisa este código
Dim fecha As Date
Private Sub TextBox1_AfterUpdate()
'aquí deberás poner tu código
MsgBox (fecha)
End Sub
'Tienes que crear esta función
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Mid(TextBox1.Value, 4, 2) > 12 Then
MsgBox "Fecha invalida", vbCritical
TextBox1.Value = vbNullString
TextBox1.SetFocus
Exit Sub
End If
'con esto validas el formato de fecha
fecha = DateSerial(Year(Date), Month(Date), Day(Date))
TextBox1.Value = Format(TextBox1.Value, "dd/mm/yyyy")
fecha = TextBox1.Value
End Sub
Saludos
Dam
Por favor, no olvides cerrar la pregunta
P.D.
Soy DAM
Buenas tardes!
Disculpa Dam ... Error de tipeo grosero!!
El código quedaría de la sig. manera ¿?
Option Explicit
Dim fecha As Date
Private Sub TextBox1_AfterUpdate()
Sheets("base").Activate
Sheets("base").Range("a1").Select
ListBox1.RowSource = Empty
Sheets("hoja3").Range("A:c").ClearContents
Sheets("base").Range("E2:G2").ClearContents
ListBox1.ColumnWidths = "40;100;60"
Sheets("base").Range("E2") = "*" & TextBox1 & ""
Range("a1:c1000").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"E1:E2"), copytorange:=Sheets("hoja3").Range("a1"), Unique:=False
ListBox1.RowSource = "hoja3!a2:c1000"
MsgBox ("fecha")
End Sub
Private Sub textbox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Mid(TextBox1.Value, 4, 2) > 12 Then
MsgBox "Fecha Invalida", vbCritical
TextBox1.Value = vbNullString
TextBox1.SetFocus
Exit Sub
End If
fecha = DateSerial(Year(Date), Month(Date), Day(Date))
TextBox1.Value = Format(TextBox1.Value, "dd/mm/yyyy")
fecha = TextBox1.Value
End Sub
Pero no me filta la fecha..
Podría echarle un ojo?
gracias
saludos
Juan
Mejor dime qué quieres hacer, cómo tienes los datos y cómo quieres que queden, poniendo varios ejemplos reales, indícame nombres de hojas, en dónde están los datos, etc.
Sin datos no puedo probar la macro y ver lo que esta haciendo.
Dam.
Buenas noches!
Hoja3 (base) Col. A (Fecha) Col B(operario) Col C Guantes
01-09-12 juan 1
10-09-12 dam 2
15-09-12 adam 1
Busco que se pueda filtrar por fecha donde el textbox1 cuando ponga la fecha(desde) 1-09-12 salte quien retiro, Ademas en un textbox2 ponga (hasta) y me liste lo que se retiro ej. 01-09 al 10-09 y me muestra que juan y dam retiraron.
El textbox 3 filtraría por operario.
Espero que no sea tan complicado.
Gracias por tu tiempo.
saludos
Juan
¿Y el resultado del filtro dónde lo quieres?
Veo que en tu macro mandas el filtro a un listbox, ¿por qué?
También veo que tienes dos hojas "Hoja3" y "base"
¿Entonces dónde tienes tus datos?
¿Y dónde quieres el resultado? ¿Y a partir de qué celda quieres que ponga el resultado?
¿Y qué versión de excel tienes?
Saludos. Dam
Dam..
Se ve que lo estoy mareando disculpe ante todo.
El resultado del filtro lo paso en un listbox para visualizarlo no utilizo el excel para visualizar datos.
La hoja 3 es donde se pasa el filtro y en base es donde se encuentra los datos a filtrar.
Los resultado del filtro se pasarían a la hoja 3 y los tomaría el listbox para visualizar, mi inconveniente es filtrar por las fechas. Ya que quería realizar una búsqueda por fecha(desde-hasta) u operario.
La versión de excel es 2003.
Cambie esta linea y me filtra la fecha el tema es que cuando hay mas de una fecha para filtrar me muestra todas las fechas
Sheets("base").Range("E2") = ("<=" & TextBox2.Value, "dd/mm/yyyy")
Gracias por su tiempo!
saludos
Juan
Te mando una macro, con la búsqueda de fechas, tus datos deberán estar en las columnas A, B y C, los títulos en A1, B1 y C1
Tienes que tener lo siguiente:
Textbox1 para la fecha desde
Textbox2 para la fecha hasta
Textbox3 para el operario
CommandButton1 para realizar la búsqueda
El problema de fecha en el autofiltro, había que cambiar el formato así :
Format(fechadesde, "mm/dd/yyyy")
Después de hacer el filtro te copia el resultado en la hoja3, de ahí ya lo puedes tomar y ocupar el resultado como desees.
'***Macro*** Public fechadesde, fechahasta As Date Public operario As String Private Sub CommandButton1_Click() 'Por.dam operario = TextBox3.Value 'Revisa el contenido de las fechas, para evaluar si es correcto el rango If fechadesde <> 0 Then If fechahasta = 0 Then fechahasta = fechadesde Call busca Else If fechahasta < fechadesde Then MsgBox ("Fecha hasta es menor a fecha desde") TextBox2.SetFocus Else Call busca End If End If Else If TextBox3 = "" Then MsgBox ("Introduzca un valor a buscar") TextBox1.SetFocus Else Call busca End If End If End Sub Private Sub textbox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Not IsDate(TextBox1.Value) Then If Not TextBox1.Value = "" Then MsgBox "Fecha Invalida", vbCritical TextBox1.Value = "" Cancel = True End If Else fechadesde = DateSerial(Year(Date), Month(Date), Day(Date)) TextBox1.Value = Format(TextBox1.Value, "dd/mm/yyyy") fechadesde = TextBox1.Value End If End Sub Private Sub textbox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Not IsDate(TextBox2.Value) Then If Not TextBox2.Value = "" Then MsgBox "Fecha Invalida", vbCritical TextBox2.Value = "" Cancel = True End If Else fechahasta = DateSerial(Year(Date), Month(Date), Day(Date)) TextBox2.Value = Format(TextBox2.Value, "dd/mm/yyyy") fechahasta = TextBox2.Value End If End Sub Sub busca() Worksheets("base").Select Columns("A:A").Select Selection.NumberFormat = "dd/mm/yyyy;@" Range("A1:C1").Select Range(Selection, Selection.End(xlDown)).Select Worksheets("base").AutoFilterMode = False If fechadesde <> "" Then Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=">=" & _ Format(fechadesde, "mm/dd/yyyy"), _ Operator:=xlAnd, Criteria2:="<=" & _ Format(fechahasta, "mm/dd/yyyy") If operario <> "" Then Selection.AutoFilter Field:=2, Criteria1:=operario, Operator:=xlAnd End If Else If operario <> "" Then Selection.AutoFilter Field:=2, Criteria1:=operario, Operator:=xlAnd End If End If 'copia el resultado del filtro a hoja3 Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.SpecialCells(xlCellTypeVisible).Select Worksheets("Hoja3").Cells.Clear Selection.Copy Destination:=Worksheets("Hoja3").Range("A1") Worksheets("Hoja3").Select End Sub '***Macro***
- Compartir respuesta