Ocultar várias linhas no Excel VBA

Ocultar várias linhas no Excel VBA

Estou tentando ocultar todas as linhas que contêm o valor "xx" na coluna A e não ocultar as linhas que contêm "a" na coluna A. O intervalo é de A8:A556. Esta macro precisa ser acionada por uma alteração na célula C4.

Alguma ideia de por que não está funcionando? Aqui está a tentativa atual:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(True, True) = "$C$4" Then

    If Range("A8:A555").Value = "xx" Then
        Rows("8:555").EntireRow.Hidden = True
    ElseIf Range("A8:A555").Value = "a" Then
        Rows("8:555").EntireRow.Hidden = False

     End If
   End If

End Sub

Obrigado!

EDITAR:

Olá Fixer1234, aqui está o detalhe:

  • "xx" e "a" podem não existir juntos se a macro funcionar corretamente.
  • Apenas as linhas "xx" devem ser ocultadas
  • Os valores "xx" não estão em combinação com valores que não podem ser ocultados.
  • Os valores "a" não estão em combinação com valores que devem ser ocultados.
  • existem outras linhas que não contêm "xx ou" a "que não precisam ser ocultadas (devo adicionar um" a "a essas colunas ou remover completamente o IfElse?).
  • A linha "xx" contém outras fórmulas, um resultado em branco da fórmula significa que a linha deve ser ocultada.
  • As linhas "a" têm a mesma fórmula, mas produzem um resultado e não devem ser ocultadas.

Erro em tempo de execução '13': digite incompatibilidade e a depuração vai para o primeiro If Range("A8:A555").Value = "xx" Then

Responder1

Você não pode testar todos os valores em um intervalo usando Range("A8:A555").Value = "xx". Isso gerará um erro de incompatibilidade de tipo.

Você precisa percorrer cada célula do intervalo e testar individualmente se é Valueigual a "xx".

Para fazer o código rodar mais rápido, não oculte as linhas ao detectá-las, mas crie um Rangearquivo Rangespara ser ocultado e oculte-as todas de uma vez.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range
Dim RangeToHide As Range

    'Test if Target is C4
    If Not Intersect(Target, [C4]) Is Nothing Then
        'Loop through each cell in range and test if it's "xx"
        For Each cel In Range("A8:A555")
            If cel = "xx" Then
                If RangeToHide Is Nothing Then
                    'Initialise RangeToHide because Union requires at least 2 ranges
                    Set RangeToHide = cel
                Else
                    'Add cel to RangeToHide
                    Set RangeToHide = Union(RangeToHide, cel)
                End If
            End If
        Next
        RangeToHide.EntireRow.Hidden = True
    End If
End Sub

Responder2

Use este código VBA como Módulo Padrão, irá ajudá-lo a ocultar todas as linhas com XXou xxem Column A.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(True, True) = "$C$4" Then

Dim i As Integer
  Application.ScreenUpdating = False



    For i = 8 To 255

    If Sheets("Sheet1").Range("A" & i).Value = "XX" Or Sheets("Sheet1").Range("A" & i).Value = "xx" Then
    Rows(i & ":" & i).EntireRow.Hidden = True
    End If


    Next i
    End If

    Application.ScreenUpdating = True


End Sub

Observação

Não há necessidade de usar nenhum código para exibir linhas com aou A, pois já estão visíveis. E acima de tudo, o código usado oculta linhas específicas em Column A.

Responder3

Como faço para ocultar linhas separadas?
É assim que penso:

Private Sub CheckBox1_Click()
If CheckBox1 = False Then
    [15:15].EntireRow.Hidden = True
    [3:3].EntireRow.Hidden = True
Else
    [15:15].EntireRow.Hidden = False
    [3:3].EntireRow.Hidden = False
End If

Atenciosamente
Mattias

informação relacionada