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 é Value
igual a "xx".
Para fazer o código rodar mais rápido, não oculte as linhas ao detectá-las, mas crie um Range
arquivo Ranges
para 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 XX
ou xx
em 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 a
ou 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