Hola a todos.
Me gustaría saber que instrucción puedo utilizar para que me haga el match en un filtro. Es decir, si existe una instrucción que pueda ayudarme a que cuando hago una filtro y no se encuentran datos con ese criterio de filtro en una tabla, no me realice el filtro y solo me mande un mensaje de error de que "no existe ese dato en la tabla". Ya que el filtro que tengo actualmente al seleccionar un criterio y no existen datos con ese criterio en la tabla me filtra la tabla y sólo me pone el encabezado.
Gracias y Saludos,
Para saber si hay datos o no hay que aplicar el filtro, no queda otro remedio.
Lo que puedes hacer a continuación es comprobar si hay resultados, y si no los hay, desactivar el filtro para mostrar todos los resultados.
Para saber si hay algún dato que cumplen el filtro puedes contar las celdas visibles en el rango filtrado, si hay cero (o una si incluyes el encabezado), es que todas quedaron ocultas y por tanto ninguna cumple el filtro.
Para saber las celdas visibles, los rangos tienen una propiedad SpecialCells (¿te suena lo de Ir a Especial...?) que permite elegir determinado tipo de celdas, por ejemplo las visibles.
por ejemplo si utilizas un autofiltro, el rango del autofiltro es algo así:
ActiveSheet.AutoFilter.Range
Si utilizas un filtro avanzado tendrás que utilizar el mismo rango que utilices para aplicar el filtro.
Como el resultado de esto es también un rango, puedes contar sus filas con algo así:
MiRangoDeFiltrado.SpecialCells(xlCellTypeVisible).Rows.Count
Si esto es igual a uno (sólo devuelve el encabezado) quiere decir que ningún dato cumple los criterios, así que puedes mostrar un mensaje o desactivar el filtro, o lo que quieras hacer en este caso, por ejemplo con algo así:
If MiRangoDeFiltrado.SpecialCells(xlCellTypeVisible).Rows.Count = 1 Then
' muestra un mensaje y lo que quieras hacer más
MsgBox "No hay ningún dato para estos criterios de búsqueda"
End If
Ya nos contarás qué tal...
------
Ya sé Excel, pero necesito más ahora en pdf
------
Ya sé Excel, pero necesito más.
Hola Paco,
Muchas gracias por responder mi duda. Sin embargo al añadir estas instrucciones con SpecialCells, aún sigue sin filtrarme la información de la tabla. Por ejemplo, mi código queda:
Sub Datos()
Dim error As String
If [AB22] = 0 Then
error = MsgBox("Error: Seleccione un dato")
End If
Range("Table1[#All]").AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:=Range.SpecialCells(xlCellTypeVisible,"AB21:AB22"), Unique:=False
MsgBox "No existen contactos con este criterio de búsqueda"
ActiveSheet.ShowAllData
End Sub
Yo creo que no me quedó muy claro, como utilizar esa propiedad :(
Gracias por tu ayuda!
Saludos,
Jesús
no se trata de poner SpecialCells como criterio del filtro.
Debes aplicar el filtro normalmente, y luego, sobre el rango ya filtrado, cuentas las celdas visibles.
'primero aplicas el filtro
Range("Table1[#All]").AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:=Range("AB21:AB22"), Unique:=False
' Y ahora comprobamos si hay datos o no:
If Range("Table1[#All]").SpecialCells(xlCellTypeVisible).Rows.Count = 1 Then
' si no hay resultados es cuando mostramos el mensaje
MsgBox "No existen contactos con este criterio de búsqueda"
ActiveSheet.ShowAllData
End If
------
Ya sé Excel, pero necesito más ahora en pdf
------
Ya sé Excel, pero necesito más.
tal vez puedas ahorrarte el filtro si haces un match para contar el numero de repeticiones del parametro de busqueda en el rango deseado
WorksheetFunction.Match("criterio", Range("1:1"), 0)