Como puedo ocultar y mostrar filas a través de varios Check

Quiero pedir el apoyo de ustedes para el siguiente caso, tal como se muestra en imagen tengo cuatro checkbox al momento de estar desactivados tienen que estar ocultas las filas de la numero 21 la 85, y al momento de seleccionar uno por ejemplo el primer checkbox que dice “3. Retenciones sobre actividades lucrativas” muestre las filas de la 22 a la 44, y si selecciono el 2do. Que muestre las filas de la numero 46 a la 50, el 3ro Que muestre las filas de la numero 52 a la 60, el 4to Que muestre las filas de la numero 62 a la 84, pero quisiera poder seleccionar dos, tres o todos los checkbox a la vez, es decir poder seleccionar el 2 y el 4, o el 1 y el 3, o del 1 al 4, por cada uno que seleccione tiene que mostrar las filas que indico arriba y si quito (desactivo) el checkbox que oculte esas filas que le corresponden, es decir por cada uno que vaya desmarcando que oculte las filas

Además quiero dejar bloqueadas ciertas celdas para que no puedan manipular la información o fórmulas que tiene el archivo, ya tengo activado la casilla de celdas bloqueadas de formato de celdas para poder proteger la hoja con una contraseña “2237”

1 Respuesta

Respuesta
1

Se puede hacer por VBA. El código básico para esconder o mostrar filas es el siguiente:

Range("10:20").Select
Selection.EntireRow.Hidden = True

La primera linea selecciona las filas, en el ejemplo de la 10 a la 20, luego en la segunda fila se esconden con True. (False para mostrarlas)

Ahora bien, suponiendo que el checkbox es un Activex Control (y si no, te recomiendo que uses ese mejor) le das click derecho y seleccionas "View Code" o "Ver Código"

en el editor de código de VBA pegas lo siguiente:

Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
    Range("22:44").Select
    Selection.EntireRow.Hidden = False
Else
    Range("22:44").Select
    Selection.EntireRow.Hidden = True
End If
End Sub

Ahora bien, según entiendo, esas filas estarán siempre ocultas y solo se mostraran si se selecciona el checkbox. Suponiendo que el nombre del control sea por defecto "CheckBox1" pero si lo cambiaste también debe cambiar en el código. Y así harías con todos, de manera que te quedaría así todo el código completo para los 4 checkbox:

Private Sub CheckBox1_Click()
Application.ScreenUpdating = False
    If CheckBox1.Value = True Then
        Range("22:44").Select
        Selection.EntireRow.Hidden = False
    Else
        Range("22:44").Select
        Selection.EntireRow.Hidden = True
    End If
Application.ScreenUpdating = True
End Sub
Private Sub CheckBox2_Click()
Application.ScreenUpdating = False
    If CheckBox2.Value = True Then
        Range("46:50").Select
        Selection.EntireRow.Hidden = False
    Else
        Range("46:50").Select
        Selection.EntireRow.Hidden = True
    End If
Application.ScreenUpdating = True
End Sub
Private Sub CheckBox3_Click()
Application.ScreenUpdating = False
    If CheckBox3.Value = True Then
        Range("52:60").Select
        Selection.EntireRow.Hidden = False
    Else
        Range("52:60").Select
        Selection.EntireRow.Hidden = True
    End If
Application.ScreenUpdating = True
End Sub
Private Sub CheckBox4_Click()
Application.ScreenUpdating = False
    If CheckBox4.Value = True Then
        Range("62:84").Select
        Selection.EntireRow.Hidden = False
    Else
        Range("62:84").Select
        Selection.EntireRow.Hidden = True
    End If
Application.ScreenUpdating = True
End Sub

Si te fijas cada uno tiene la instrucción: Application.ScreenUpdating = False/True. Eso no es obligatorio pero yo prefiero usarlo cuando hago cambios en las hojas, así es menos visible los saltos de Excel cuando hace cambios.

Cuando marcas un Checkbox para mostrar las filas, se va a seleccionar todas las filas de ese rango, lo puedes dejar así si quieres, pero si quieres seleccionar una en especifico agrega:

Range("aqui la celda o rango que quieras"). Select

Eso iría después de cada Selection.EntireRow.Hidden = False

Cualquier duda déjame saber

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas