es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ocultar filas mediante casillas de verificación

Estoy ocultando o mostrando filas en un libro de trabajo basado en casillas de verificación en la parte superior de la Hoja2. Al habilitar una casilla y se muestra un conjunto de filas, y viceversa, en varias hojas.

Para acelerar las cosas, Sheet1 tiene varios botones que se utilizan para configurar el libro de trabajo llenando datos en celdas clave y especificando qué casillas de verificación están habilitadas y cuáles no en Sheet2.

El código típico de un botón en Sheet1 es:

Sub Configurar()

Worksheets(“Sheet2”).CheckBoxes(“Check Box 101”).Value = 1
Call CheckBox101_Click
End Sub

Esto establece el valor de la casilla de verificación en 1 o verdadero, y luego ejecuta el código que oculta o muestra filas en función del estado de la casilla de verificación.

Y el código de la casilla de verificación:

Sub CheckBox101_Click()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets(“Sheet2”)
Worksheets(“Sheet2”).Range(“A11:A35”).EntireRow.Hidden = Not ws.CheckBoxes(“Check Box 101”) = 1
Worksheets(“Sheet3”).Range(“A37”).EntireRow.Hidden = Not ws.CheckBoxes(“Check Box 101”) = 1
End Sub

Hacer clic manualmente en la casilla de verificación funciona perfectamente con este código, pero al ejecutarlo a través de la macro Configurar oculta todo perfectamente en Sheet3, pero no en Sheet2 por alguna razón.

¿Alguna sugerencia para actualizar el código sub de Checkbox101 para ocultar o mostrar las filas en Sheet2 también?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede estar en la forma en que el código hace referencia a la hoja de cálculo en el subprocedimiento CheckBox101_Click. En lugar de hacer referencia directamente a la hoja de cálculo, intenta usar la variable de objeto “ws” que se estableció al comienzo del subprocedimiento.

    Aquí tienes un código actualizado para el subprocedimiento CheckBox101_Click que debería funcionar tanto para Sheet2 como para Sheet3:

    Sub CheckBox101_Click()
    
    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet2")
    ws.Range("A11:A35").EntireRow.Hidden = Not ws.CheckBoxes("Check Box 101") = 1
    
    Set ws = ThisWorkbook.Sheets("Sheet3")
    ws.Range("A37").EntireRow.Hidden = Not ws.CheckBoxes("Check Box 101") = 1
    

    ¡Espero que esto te ayude!

Comments are closed.