1
resposta

Execução Sub

Sub filtro1()

 Dim celula As String
 Dim rangeInicio As Integer
 Dim rangeFim As Integer
 Dim refColuna As String
 Dim numPlanilha As Worksheet

 rangeInicio = Planilha3.Range("F268")
 rangeFim = Planilha3.Range("F269")
 refColuna = Planilha3.Range("F270")
 Set numPlanilha = Worksheets(Planilha3.Range("F271").Value)

  For i = rangeInicio To rangeFim

     celula = refColuna & CStr(i)

     If numPlanilha.Range(celula) = "" Then
         Rows(i).Select
         Selection.EntireRow.Hidden = True

     ElseIf numPlanilha.Range(celula) <> "" Then
         Rows(i).Select
         Selection.EntireRow.Hidden = False

     End If

  Next

Planilha3.Range("L268") = rangeInicio
Planilha3.Range("L269") = rangeFim
Planilha3.Range("L270") = refColuna
Planilha3.Range("L271") = numPlanilha.Range(celula).Show
Planilha3.Range("L272") = i
Planilha3.Range("L273") = celula

End Sub

Bom dia! Eu fiz está lógica para ocultar as linhas vazias em um range selecionado. Porém na lógica if ele não executa corretamente o código. Estando a célula vazia ou preenchida ele oculta da mesma forma. E quando coloco o endereço fixo(ex:If Planilha3.Range(célula)...) da planilha, o if executa corretamente.

1 resposta

Olá Tiago, tudo bem?

O VBA deve seguir totalmente as regras de lógica e sintaxe para que o resultado seja o esperado.

Outro ponto é que fica bem difícil comentar o código sem conhecer a planilha e os objetivos. Por isso, aqui no fórum estamos comentando em detalhes apenas os códigos referentes ao curso, para não correr o risco de colocar informações incorretas.

Alguns pontos que posso comentar sobre o código são:

1-Quando a segunda lógica é exatamente o contrário da primeira, não há necessidade de usar ElseIF, use apenas Else;

2-De forma geral, eu prefiro usar trim(sheets(NomePlan).Range(célula)) para garantir que funcione na maioria das situações;

3-Outra coisa que prefiro usar é vbnullstring no lugar de "", para evitar erros.

Abraços!