Precisa de ajuda para ocultar / mostrar as linhas do Excel com base no valor em uma célula, mas permitir a movimentação de linhas em torno de mais tarde

0

Na Fila 4, faço uma pergunta e D4 contém a resposta de Sim ou Não.

Se a resposta for Sim em D4, quero que as linhas ocultas 5 e 5 sejam exibidas com perguntas de acompanhamento. Isso está funcionando para mim:

If Range("D4").Value = "No" Then
    Rows("5:6").EntireRow.Hidden = True
ElseIf Range("D4").Value = "Yes" Then
    Rows("5:6").EntireRow.Hidden = False

Na Coluna A, identifico as perguntas iniciais (como na linha 4) como "Questões em Camadas" e as perguntas subsequentes (como as linhas 5 e 6) são rotuladas como "Follow-up Q".

Existe uma maneira de fazer isso sem atualizar manualmente todas as linhas? Além disso, preciso permitir a adição / remoção de linhas acima, o que afetaria quais linhas serão ocultadas / ocultadas. Obrigado.

    
por Jessica 06.04.2016 / 22:32

2 respostas

0

Não sei exatamente o que você quer dizer com "atualizando manualmente cada linha", mas se você colocar o código em um subpasta Worksheet_Change no objeto da planilha (não um módulo), ele será executado automaticamente sempre que a célula for D4 é atualizado nessa planilha

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$D$4" Then
        If Target.Value = "No" Then
            Rows("5:6").EntireRow.Hidden = True
        ElseIf Target.Value = "Yes" Then
            Rows("5:6").EntireRow.Hidden = False
        End If
    End If
End Sub
    
por 07.04.2016 / 11:45
0

Recebi ajuda de um amigo e quis compartilhar a solução - abaixo.

Em Qualquer atualização para a pasta de trabalho que ocorra na coluna 4 (que é a Resposta do Cliente), se eles responderem Não a uma "Pergunta em Camadas" ... as linhas subseqüentes com um "Follow-Up Q" serão ocultadas.

Você teria que atualizar essa macro se movesse as colunas Business Criteria ("A") ou Client Answer.

Isso deve funcionar:

Sub Worksheet_Change particular (ByVal destino como intervalo)     Dim i As Integer

If Target.Column = 4 Then
    If Range("A" & Target.Row).Text = "Tiered Question" Then
        i = 1
        Do While Range("A" & Target.Row + i).Text = "Follow-Up Q"
            Range("A" & Target.Row + i).EntireRow.Hidden = (Target.Value = "No")
            i = i + 1
        Loop
    End If
End If

End Sub

    
por 15.04.2016 / 18:31