Ir ao conteúdo
  • Cadastre-se

Ocultar e reexibir linas a partir do resultado uma fórmula, com VBA


Wladimir Melo

Posts recomendados

Boa tarde!

Estou tentando montar uma planilha de financiamento para apresentar em sala de aula para os meu alunos. Contudo, preciso de uma ajuda para automatiza-la.

A minha dificuldade é que eu quero que a última linha da planilha tenha o TOTAL, que sempre ficará na mesma linha (linha 411, por exemplo). Portanto, se eu informo um financiamento de 100 meses, as linhas que não têm resultado de cálculo acima de zero (0) precisam ser ocultas. Caso eu decida alterar os meses de financiamento para 120, 20 linhas, que estavam ocultas, precisam ser reexibidas.

Eu estou tentando encontrar uma solução, mas algo está dando errado. Vejam o que o meu conhecimento limitado sobre o assunto permitiu fazer:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Tempo As Integer

'Executa a macro quando a célula de meses de AMORTIZAÇÃO for alterada

If Not Intersect(Target, Range("b3")) Is Nothing Then

Call macro1

End If

'Executa a macro quando a célula de meses de CARÊNCIA for alterada

If Not Intersect(Target, Range("b4")) Is Nothing Then

Call macro1

End If

'Soma os meses de carência e amortização e atribui a célula TOTAL de tempo

Tempo = [b3] + [b4]

Range("B2").Value = Tempo

Application.EnableEvents = True

Application.EnableEvents = True

End Sub

'Nesta macro eu tento ocultar ou reexibir linhas a partir do resultado de célula TOTAL de tempo

Sub macro1()

Dim i As Integer

'13 é o número da linha onde inicia a planilha. O cabeçalho da planilha está na linha 12

For i = 13 To 411

If Range("a" & i).Value <> "" Then

Rows(i & ":" & i).Select

Selection.EntireRow.Hidden = False

Else

End If

Next i

For i = 13 To 411

If Range("a" & i).Value = "" Then

Rows(i & ":" & i).Select

Selection.EntireRow.Hidden = True

Else

End If

Next i

Range("B2").Activate

End Sub

Muito obrigado se alguém puder ajudar.

OBSERVAÇÃO: O moderador PATROPI gentilmente me indicou uma planilha aberta que calcula a tabela, mas didaticamente ela não é muito indicada, pois, como o próprio autor menciona no artigo, foram postos códigos propositalmente para dificultar a compreensão. Portanto, ela parece mais recomendável para pessoas com conhecimento avançado de Excel.

Link para o comentário
Compartilhar em outros sites

Olá Wladimir Melo

Altere o seu código conforme abaixo:

For i = 13 To 411

If Range("a" & i).Value >= 0 Then

Rows(i & ":" & i).Select

Selection.EntireRow.Hidden = False

Else

End If

Next i

For i = 13 To 411

If Range("a" & i).Value <= 0 Then

Rows(i & ":" & i).Select

Selection.EntireRow.Hidden = True

Else

End If

Next i

Range("B2").Activate

Veja se é por aí!!!

Márcio

Link para o comentário
Compartilhar em outros sites

Olá Wladimir Melo

Altere o seu código conforme abaixo:

For i = 13 To 411

If Range("a" & i).Value >= 0 Then

Rows(i & ":" & i).Select

Selection.EntireRow.Hidden = False

Else

End If

Next i

For i = 13 To 411

If Range("a" & i).Value <= 0 Then

Rows(i & ":" & i).Select

Selection.EntireRow.Hidden = True

Else

End If

Next i

Range("B2").Activate

Veja se é por aí!!!

Márcio

Márcio Rodrigues,

Obrigado pela ajuda. Eu não consigo explicar o que acontece. Quando eu digitava o número de meses, o código VBA funcionava bem. Contudo, depois que o número de meses passou a ser o resultado de uma soma (número de meses de carência + número de meses de amortização), o código deixou de funcionar corretamente. O que acontece de errado é que, sempre que eu altero o tempo de carência ou amortização, as linhas ocultas em raros casos são as mesmas da soma do tempo total.

Se você quiser, posso lhe enviar o arquivo para análise.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...