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

Respuesta
1

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***

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas