Ocultar / mostrar filas automáticamente 1 -100 según el valor de la celda en la primera columna

0

Tengo una hoja en la que tengo la primera celda A1 dado un número de 0 o 1 en función de la entrada de otra hoja dependiendo de una selección del usuario.

Si la celda A1 cambia a 0, toda la fila está oculta.

Estoy usando lo siguiente a continuación y funciona bien Auto / ocultar la fila.

Lo que estoy buscando hacer ahora es mostrar la fila si la misma celda cambia de 0 a 1.

¡Gracias por cualquier ayuda! Aquí está el archivo ... http://jmp.sh/89BVI0A

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [A:A]) Is Nothing Then
        Target.Rows.Hidden = UCase(Target.Value) = "0"
    End If
End Sub

Puede encontrar una copia de la hoja de cálculo aquí .

klocksbass
fuente
Hola reparador1234. Estoy tratando de hacer las dos cosas. Quiero Auto / Hide y Auto Unhide dependiendo de si la celda A1 es 0 o 1 en el rango de A1: A100. Todo lo que he probado no funciona. Esto es lo único que se me ocurre que al menos se esconde correctamente. Cualquier ayuda en la parte oculta sería muy apreciada.
klocksbass
¿Qué sucede con la fórmula que muestra aquí cuando A1 es 1? ¿Qué desencadena la acción cuando cambia A1?
Fixer1234
Cuando la celda A1 cambia a 0, la fila está oculta. Cuando vuelve a cambiar a 1, necesito que la fila se muestre pero no lo hace. La celda A1 está determinada por otra selección de otra hoja. Esencialmente aportes del usuario.
klocksbass
Sospecho que el problema es que nada está provocando que la macro vuelva a evaluar. Se ejecuta una vez, tal vez en función de las condiciones cuando abre el libro, y luego nada lo hace volver a ejecutarse. Probablemente necesite incluir un disparador basado en el cambio. Pruebe forzando manualmente la macro para que se ejecute después de cambiar A1 de 0 a 1.
fixer1234
¿Hay alguna manera de que pueda enviarle el archivo para que lo vea?
klocksbass

Respuestas:

1

Use este código en el Sheet2Módulo


Option Explicit

Private Sub Worksheet_Calculate()    'Sheet2 Module

    Const FC = "A"    'Filter Column

    Dim lr As Long, filterCol As Range

    lr = Me.Cells(Me.Rows.Count, FC).End(xlUp).Row      'Determine last cell in ColA

    Set filterCol = Me.Range(Me.Cells(1, FC), Me.Cells(lr, FC)) 'ColA "UsedRange"

    Application.EnableEvents = False
        filterCol.Formula = "=Sheet1!A1"                'Update all formulas
        filterCol.AutoFilter Field:=1, Criteria1:="1"   'Show only rows where ColA = 1
    Application.EnableEvents = True
End Sub

Esto capturará la interacción del usuario en Sheet1que actualiza las fórmulas enSheet2

Ocultará todas las filas con valor 0enSheet2.colA

paul bica
fuente
1
Hola paul bica Gracias por la ayuda. Aprecio cómo me mostraste cómo describir mejor el problema. Intentaré formatear de manera similar en cualquier pregunta futura que publique. Soy nuevo aquí, lo siento. También me encanta lo eficiente que es la solución de su idea y funciona. Sospecho que mi verdadero problema es desencadenar el evento.
klocksbass
1
La razón por la que puse la validación de datos es porque el valor en la celda A1: A20 en la Hoja 1 necesita obtener su valor final por fórmula en otra celda. Imagínalo de esta manera. y probablemente debería haber hecho el archivo compartido de esta manera, que la validación de datos fue una tercera hoja "Hoja 3" que completó el valor en la Hoja 1 que Auto / oculta o muestra las filas en la Hoja 2. Cualquiera ¡Se agradece más ayuda!
klocksbass
@klocksbass - He actualizado la respuesta para Sheet2desencadenar una AutoFilteren los Worksheet_Calculate()eventos (cuando Sheet1se actualiza por el usuario)
Paul bica
@pual_bica Qué gran idea y funcionó perfectamente. Gracias.
klocksbass
@klocksbass puede aceptar la respuesta de esta manera . Eliminará esta pregunta de la lista SU 'sin respuesta'. (:
p._phidot_