Saltar al contenido

Macro para filtrar via textbox no funciona con nº y fechas


Recommended Posts

publicado

Hola a todos.

Estoy creando una tabla que me permita filtrar su contenido utilizando una lista desplegable para seleccionar la columna a filtrar y una caja de texto para el criterio. Hh logrado que funcione para todo menos para fechas y números. Lo de las fechas entiendo que puede deberse a la forma que excel las almacena, pero lo de los números me tiene confundido. He intentado definir la variable para el criterio (crit) como variant o sencillamente no definirla, pero el problema persiste.

Este es el código que tengo para filtrar (Corre cuando se le da a enter en la caja de texto)

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then

Crit = TextBox1.Value
Application.ScreenUpdating = False
ActiveSheet.Unprotect
ActiveSheet.ListObjects("Tabla2").Range.AutoFilter Field:=Range("B2"), Criteria1:= _
"*" & Crit & "*", Operator:=xlAnd
Application.ScreenUpdating = True
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True
End If
End Sub[/CODE]

Gracias de antemano.

Saludos.

Adjunto el archivo de la tabla

Tabla General (Nueva) (Combobox).rar

publicado

Hola prueba así:

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Dim Crit As Variant
Crit = TextBox1.Value
If IsNumeric(Crit) Then Crit = Format(Crit, "##,###,###")
Application.ScreenUpdating = False
ActiveSheet.Unprotect
ActiveSheet.ListObjects("Tabla2").Range.AutoFilter Field:=Range("B2"), Criteria1:= _
"=" & Crit, Operator:=xlAnd
Application.ScreenUpdating = True
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True
End If
End Sub[/CODE]

Salu2

publicado

Hola, Riddle.

Gracias por tu pronta respuesta.

Sigue sin funcionar. Además, con el código que propones, no funciona ni siquiera con el texto. Con el código que tenía originalmente funcionaba perfecto con texto. Me interesa tener comodines al principio y al final del criterio para poder buscar coincidencias entre el texto contenido en las celdas.

Saludos.

publicado

A mi si me funciona, bueno intenta con este:

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Dim Crit As String
Crit = TextBox1.Value
If IsDate(Crit) Then Crit = Format(Crit, "dd/mm/yyyy"): Crit = "=" & Crit: a = 1
If IsNumeric(Crit) Then Crit = Format(Crit, "##,###,###"): Crit = "=" & Crit: a = 1
If Not a = 1 Then Crit = "=*" & Crit & "*"
Application.ScreenUpdating = False
ActiveSheet.Unprotect
ActiveSheet.ListObjects("Tabla2").Range.AutoFilter Field:=Range("B2"), Criteria1:= _
Crit, Operator:=xlAnd
Application.ScreenUpdating = True
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True
End If
End Sub[/CODE]

Salu2

Tabla General (Nueva) (Combobox).zip

publicado

Tampoco, Riddle. Con ese código filtra texto, pero no números ni fechas. Funciona igual que el que tenía. ¿Será un problema de configuración del libro? Aunque no le he cambiado nada.

publicado

Como te comente a mi me funciona sin problemas, te dejo un GIF para que compruebes lo que digo.

Recuerda que primero debes seleccionar la columna a filtrar y después colocar los datos.

Salu2

post-143023-145877009542_thumb.gif

publicado

Me parece bien raro. Cuando filtro texto funciona bien, pero con los números o las fechas esconde todas las filas, como si no existiese el valor que busco. ¡Ni siquiera dándole formato de texto lo encuentra!

Gracias de todas maneras, Riddle. Veré qué puedo hacer.

publicado
Me parece bien raro. Cuando filtro texto funciona bien, pero con los números o las fechas esconde todas las filas, como si no existiese el valor que busco. ¡Ni siquiera dándole formato de texto lo encuentra!.

Si conviertes los números o fechas a texto no te filtrara nada, es por eso que no te funcionaba desde un principio, como puedes ver en el código pongo la condición de que si es una fecha lo que esta en el textbox1 se aplicara el formato de "dd/mm/yyyy" y ademas se aplicara el formato de filtro adecuado para la fecha, lo mismo si detecta que es un valor numérico, el formato de texto lo debes usar solo para buscar texto no fechas ni números.

Como viste en el Gif que te deje funciona sin problemas, introduzco las fechas como 04/09/13 y los números como un entero "22833256". Ademas debes limpiar todo el textbox antes de introducir otro valor ya que de lo contrario estarías filtrando un rango ya filtrado y no te mostraría ningún valor.

Salu2

publicado

Tengo todo eso claro, Riddle. Yo mismo programé el textbox para que eliminara los filtros al limpiarlo. El formato de texto se lo di esta vez solo para probar si cambiaba algo. Entiendo lo que hace el código que propones, pero algo pasa en el computador o en la configuración de Excel que no encuentra los valores cuando son números o fechas. De hecho, tengo el mismo código que tenía originalmente en otro formato que ya tengo en uso que sí encuentra cualquier valor, independientemente de su formato y sin preformatear los valores del textbox1 como lo hace tu código.

Me surgió una duda. Me doy cuenta que si cambio el formato de los valores, los cambios no son visibles a menos que edite la celda y salga. Traté haciendo Application.EnableEvents = True y Application.ScreenUpdating = true para ver si es que en alguna parte del resto de los códigos lo dejaba en false, pero nada.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.