Como faço para criar uma macro para mostrar / ocultar linhas com base em uma lista suspensa?

2

Tentou seguir alguns conselhos com base em um post anterior ( código VBA para ocultar ou exibir linhas com base em um valor de célula ) para criar uma macro para que eu possa mostrar / ocultar determinadas linhas com base em uma lista suspensa. Estou bem perto de ter, mas pelo menos 1 parte da minha fórmula não está funcionando. Aqui está o que estou usando:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("D13").Value = "Unlimited" Then
         Rows("77").EntireRow.Hidden = True
    ElseIf Range("D13").Value = "Unlimited" Then
        Rows("78:82").EntireRow.Hidden = False
    End If
    If Range("D13").Value = "Limited" Then
        Rows("78:82").EntireRow.Hidden = True
    ElseIf Range("D13").Value = "Limited" Then
        Rows("77").EntireRow.Hidden = False
    End If
    If Range("D13").Value = "Select one" Then
        Rows("78:82").EntireRow.Hidden = False
    ElseIf Range("D13").Value = "Select one" Then
        Rows("77").EntireRow.Hidden = False
    End If
End Sub

Com essa fórmula, estou procurando influenciar quais linhas são mostradas abaixo da seleção da lista suspensa com base no que o usuário seleciona. Célula com lista suspensa é D13. Tem 3 valores possíveis: Limited, unlimited & selecione um. Aqui está o que eu estou apontando para:

  • Selecione uma: todas as linhas de 77 a 82 são visíveis
  • Limitado: a linha 77 é visível, as linhas 78-82 estão ocultas
  • Ilimitado: a linha 77 está oculta, as linhas 78-82 estão visíveis

O código acima parece funcionar de maneira um pouco inconsistente: não tenho certeza se as funções que defini para cada menu suspenso estão sobrepostas umas às outras inesperadamente? Agora minhas funções estão funcionando como esperado somente quando você muda de selecionar um - > limitado / ilimitado, mas não consigo fazer com que continuem trabalhando se você mudar posteriormente para outra seleção.

Qualquer ajuda que alguém tenha seria muito apreciada !! Atualmente rasgando meu cabelo um pouco acima desse haha. Agradecemos antecipadamente:)

    
por elliem 20.04.2018 / 01:44

2 respostas

0

A primeira linha no código abaixo manipula o Worksheet_Change. Isso garante que apenas uma célula foi alterada e que a célula foi D13.

Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect(Target, Range("D13")) Is Nothing Or Target.Cells.Count > 1 Then
        Exit Sub

    ElseIf Range("D13").Value = "Select One" Then
        Rows("77:82").EntireRow.Hidden = False

    ElseIf Range("D13").Value = "Limited" Then
        Rows("77").EntireRow.Hidden = False
        Rows("78:82").EntireRow.Hidden = True    

    ElseIf Range("D13").Value = "Unlimited" Then
        Rows("77").EntireRow.Hidden = True
        Rows("78:82").EntireRow.Hidden = False   

    End If

End Sub

Observe que o código acima deve ser copiado no objeto Planilha para qualquer Planilha na qual o menu suspenso esteja ativado.

Espero que isso ajude e boa sorte.

    
por 20.04.2018 / 21:16
-1

Você pode usar essa macro simples para ocultar / mostrar as linhas específicas.

Private Sub Hide_Unhide()

  If Range("D13").Value = "Select One" Then
       Rows("77:82").EntireRow.Hidden = false
  End if

  If Range("D13").Value = "Limited" Then
        Rows("77").EntireRow.Hidden = false
        Rows("78:82").EntireRow.Hidden = true    

  ElseIf Range("D13").Value = "Unlimited" Then
        Rows("77").EntireRow.Hidden = true
        Rows("78:82").EntireRow.Hidden = False   

  End If

End Sub
    
por 20.04.2018 / 14:30