Mostra ou oculta linhas em uma planilha de excel sujeita ao valor de uma célula específica (excel 2007 e Windows 7)

1

Eu fiz uma planilha para especificar as seleções de decoração de um intervalo de opções padrão.

Existem cinco intervalos separados, por isso esta é a primeira seleção e, dentro de cada intervalo, existem seleções adicionais.

Então, no início da minha planilha, usei um "quadro" e cinco "botões de opção" e vinculei essa seleção à célula P1 .

Portanto, uma vez feita essa seleção, quero ocultar várias linhas e mostrar apenas as seleções relevantes para a primeira seleção (linhas de 10 a 19 relevantes para o intervalo de 1, linhas de 20 a 29 para o intervalo de 2, etc.).

Abaixo está meu "código", mas ele não faz nada quando eu altero as seleções do botão de opções (vejo o valor na célula P1 mudando conforme o esperado).

Sub HideShow()
'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection


If Range("P1").Value = 1 Then  ‘Decoration Range A
        Rows("10:19").Select
        Selection.EntireRow.Hidden = False
        Rows("20:59").Select
        Selection.EntireRow.Hidden = True

ElseIf Range("P1").Value = 2 Then  'Decoration Range B
        Rows("10:19").Select
        Selection.EntireRow.Hidden = True
        Rows("20:29").Select
        Selection.EntireRow.Hidden = False
        Rows("30:59").Select
        Selection.EntireRow.Hidden = False

ElseIf Range("P1").Value = 3 Then  'Decoration Range C
        Rows("10:29").Select
        Selection.EntireRow.Hidden = True
        Rows("30:39").Select
        Selection.EntireRow.Hidden = False
        Rows("40:59").Select
        Selection.EntireRow.Hidden = False

ElseIf Range("P1").Value = 4 Then  'Decoration Range D
        Rows("10:39").Select
        Selection.EntireRow.Hidden = True
        Rows("40:49").Select
        Selection.EntireRow.Hidden = False
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False

ElseIf Range("P1").Value = 5 Then  'Decoration Range E
        Rows("10:49").Select
        Selection.EntireRow.Hidden = True
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False
End If


End Sub

Eu sei que eu provavelmente não preciso da seleção final (se não for A, B, C ou D, então só pode ser E), mas eu simplesmente coloco isso em ordem.

Eu também tentei com o valor da célula como texto, ou seja, ElseIf Range("P1").Value = "5" Then... , mas também não há alegria.

Qualquer orientação apreciada.

    
por Mike H 10.03.2014 / 02:13

1 resposta

1

Se você quiser que seu código seja executado em uma seleção de botão de opção, será necessário chamar a macro com o botão de opção ou precisar que a macro seja sub worksheet_change () para ser executada alterações na planilha.

O próprio código é executado corretamente. Existem maneiras melhores de fazer isso, mas não há nada errado com seu código.

Coloque isso no VBA para a planilha na qual você está trabalhando:

Private Sub worksheet_change(ByVal Target As Range)

'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection

If Not Intersect(Target, Cells(1, 16)) Is Nothing Then

    If Range("P1").Value = 1 Then
        'Decoration Range A
        Rows("10:19").Select
        Selection.EntireRow.Hidden = False
        Rows("20:59").Select
        Selection.EntireRow.Hidden = True

    ElseIf Range("P1").Value = 2 Then  'Decoration Range B
        Rows("10:19").Select
        Selection.EntireRow.Hidden = True
        Rows("20:29").Select
        Selection.EntireRow.Hidden = False
        Rows("30:59").Select
        Selection.EntireRow.Hidden = False

    ElseIf Range("P1").Value = 3 Then  'Decoration Range C
        Rows("10:29").Select
        Selection.EntireRow.Hidden = True
        Rows("30:39").Select
        Selection.EntireRow.Hidden = False
        Rows("40:59").Select
        Selection.EntireRow.Hidden = False

    ElseIf Range("P1").Value = 4 Then  'Decoration Range D
        Rows("10:39").Select
        Selection.EntireRow.Hidden = True
        Rows("40:49").Select
        Selection.EntireRow.Hidden = False
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False

    ElseIf Range("P1").Value = 5 Then  'Decoration Range E
        Rows("10:49").Select
        Selection.EntireRow.Hidden = True
        Rows("50:59").Select
        Selection.EntireRow.Hidden = False
    End If

End If

End Sub

Mas eu faria assim:

Private Sub worksheet_change(ByVal Target As Range)

'
' HideShow Macro
' Show only the selection pane assocated to the Design line selection

If Not Intersect(Target, Range("p1")) Is Nothing Then
    On Error Resume Next
    ActiveSheet.Cells.EntireRow.Hidden = False

    If Range("P1") = 1 Then 'Decoration Range A
        Rows("20:59").Hidden = True

    ElseIf Range("P1") = 2 Then  'Decoration Range B
        Rows("10:19").Hidden = True

    ElseIf Range("P1") = 3 Then  'Decoration Range C
        Rows("10:29").Hidden = True

    ElseIf Range("P1") = 4 Then  'Decoration Range D
        Rows("10:39").Hidden = True

    ElseIf Range("P1") = 5 Then  'Decoration Range E
        Rows("10:49").Hidden = True

    End If

End If

End Sub
    
por 11.03.2014 / 13:50