Tiempo atrás publiqué un post donde exponía como copiar y pegar únicamente los registros filtrados de una tabla...
Hoy veremos una variante, aprenderemos a recorrer esos elementos filtrados y visibles de una tabla.
Partiremos de una tabla con varios campos a la cual hemos aplicado un filtro cualquiera, por ejemplo, por el país España:
Comprobamos en la imagen que las filas visibles son: 2, 6, 10, 14 y 18
Veremos dos procedimientos muy similares...
Uno primero empleando la propiedad de los rangos
.SpecialCells(xlCellTypeVisible)
y una segunda de la propiedad
.EntireRow.Hidden
Insertaremos el siguiente procedimiento en un módulo estándar:
Si lanzamos el procedimiento, en la Ventana de inmediato, veremos:
$C$2
$C$6
$C$10
$C$14
$C$18
Una segunda manera la podemos ver en este procedimiento de en un módulo estándar:
LLegando al mismo resultado...
OJO!!, por que ambas maneras emplean una propiedad de visibilidad, lo que implica que si 'ocultamos' (no solo filtramos) una fila, ésta no aparecerá en nuestros listados.
Hoy veremos una variante, aprenderemos a recorrer esos elementos filtrados y visibles de una tabla.
Partiremos de una tabla con varios campos a la cual hemos aplicado un filtro cualquiera, por ejemplo, por el país España:
Comprobamos en la imagen que las filas visibles son: 2, 6, 10, 14 y 18
Veremos dos procedimientos muy similares...
Uno primero empleando la propiedad de los rangos
.SpecialCells(xlCellTypeVisible)
y una segunda de la propiedad
.EntireRow.Hidden
Insertaremos el siguiente procedimiento en un módulo estándar:
Sub LoopSpecialTypeVisible() Dim celda As Range, rng As Range 'definimos el rango a recorrer.. que será un campo cualquiera de la tabla Set rng = Range("TblDatos[campo3]") 'recorremos ese rango.. pero solo aquellas celdas visibles!! For Each celda In rng.SpecialCells(xlCellTypeVisible) 'llevamos la dirección de la celda a la Ventana de inmediato Debug.Print celda.Address Next celda End Sub
Si lanzamos el procedimiento, en la Ventana de inmediato, veremos:
$C$2
$C$6
$C$10
$C$14
$C$18
Una segunda manera la podemos ver en este procedimiento de en un módulo estándar:
Sub LoopSpecialHidden() Dim celda As Range, rng As Range 'definimos el rango a recorrer.. que será un campo cualquiera de la tabla Set rng = Range("TblDatos[campo3]") 'recorremos ese rango.. pero solo aquellas celdas visibles!! For Each celda In rng 'verificamos si la fila está mostrada (no oculta) If celda.EntireRow.Hidden = False Then 'llevamos la dirección de la celda a la Ventana de inmediato Debug.Print celda.Address End If Next celda End Sub
LLegando al mismo resultado...
OJO!!, por que ambas maneras emplean una propiedad de visibilidad, lo que implica que si 'ocultamos' (no solo filtramos) una fila, ésta no aparecerá en nuestros listados.
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.