locked
Código para ocultar linhas RRS feed

  • Pergunta

  • Amigos, procuro um código que oculte as linhas 51 e 52, caso A51:A52 forem células vazias.

     

    Tks

    Jerson

     

    quinta-feira, 24 de julho de 2008 19:37

Respostas

  • Olá, Jerson.

    Sinceramente não sei dizer o que está havendo por que não faz sentido.

    Rodei a macro em cima do arquivo que vc me enviou e rodou perfeitamente, em ambos os intervalos.

    Como último teste, peço que modifique as fórmulas que contém o PROCV de forma que retornem "-" caso não seja encontrado nenhum valor e para o intervalo [A51:52] use "-" como condição de teste de valor da célula,

    Desta forma o codigo fica:

     

    Code Snippet

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Intervalo As Range
    Dim Célula As Range

    'Ocultar linhas de 32 a 38 se as células contiverem um string vazio
    Set Intervalo = [A32:A38]

    For Each Célula In Intervalo

        If Célula = "" Then
        Célula.EntireRow.Hidden = True
        Else
        Célula.EntireRow.Hidden = False
        End If

    Next Célula

     

    'Ocultar linhas 51 e 52 se as células contiverem um string vazio
    Set Intervalo = [A51:A52]

    For Each Célula In Intervalo

        If Célula = "-" Then
        Célula.EntireRow.Hidden = True
        Else
        Célula.EntireRow.Hidden = False
        End If

    Next Célula

    End Sub

     

     

     

    [ ]s

     

    quinta-feira, 31 de julho de 2008 10:48

Todas as Respostas

  • Jerson,

    Tente este aqui:

    Code Snippet

    Sub OcultarLinhas()
    Dim Intervalo As Range
    Dim Célula As Range

    Set Intervalo = [A51:A52]

    For Each Célula In Intervalo

    If Célula = "" Then Célula.EntireRow.Hidden = True

    Next Célula

    End Sub

     

     

    Se quiser outros intervalos diferentes de A51:A52, é só alterar a linha Set Intervalo = [A51:A52]

    [ ]s

     

    sexta-feira, 25 de julho de 2008 11:03
  • Bom dia Adilson,

     

    Me desculpe, mas eu omiti uma informação que parece ser importante neste caso. As células A51 e A52 têm uma fórmula que retorna "" em alguns casos. O teu código só funciona quando a célula está "limpa". Podes fazer este ajuste, por favor?

     

    Tks

    Jerson

     

    sexta-feira, 25 de julho de 2008 11:57
  • Teste este código aqui:

    Code Snippet

    Sub OcultarLinhas()
    Dim Intervalo As Range
    Dim Célula As Range

    Set Intervalo = [A5:A6]

    For Each Célula In Intervalo

    If Len(Célula) < 1 Then Célula.EntireRow.Hidden = True

    Next Célula

    End Sub

     

     

     

    [ ]s

     

    sexta-feira, 25 de julho de 2008 14:34
  • Not yet... continua funcionando só quando a célula está "limpa". Outra coisa, eu preciso que ela seja do tipo captura de evento.

     

    Tks

    Jerson

    sexta-feira, 25 de julho de 2008 18:14
  • Jerson,

    Só me mandando o arquivo para entender melhor as suas fórmulas, pois passou em todos os teste que fiz.

    A qual evento vc quer associar? SelectionChange, Chage ou outro?

    [ ]s

    sábado, 26 de julho de 2008 01:46
  • Jerson,

    Testei o arquivo que vc me enviou e o código abaixo funcionou perfeitamente.

    Se vc já tiver um outro evento rodando,é só inserir as instruções deste código logo na sequência das anteriores.

    Code Snippet

     

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Intervalo As Range
    Dim Célula As Range

     

    'Ocultar linhas de 32 a 38 se as células contiverem um string vazio
    Set Intervalo = [A32:A38]

    For Each Célula In Intervalo

    If Célula = "" Then Célula.EntireRow.Hidden = True

    Next Célula

     

    'Ocultar linhas 51 e 52 se as células contiverem um string vazio
    Set Intervalo = [A51:A52]

    For Each Célula In Intervalo

    If Célula = "" Then Célula.EntireRow.Hidden = True

    Next Célula


    End Sub

     

     

     

    [ ]s

    terça-feira, 29 de julho de 2008 10:22
  • Adilson, está ocultando agora, só que não volta a exibir novamente as linhas quando há dados. É possível?

     

    Sds

    Jerson

    terça-feira, 29 de julho de 2008 11:50
  • Veja desta forma:

    Code Snippet

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim Intervalo As Range
    Dim Célula As Range

    'Ocultar linhas de 32 a 38 se as células contiverem um string vazio
    Set Intervalo = [A32:A38]

    For Each Célula In Intervalo

        If Célula = "" Then
        Célula.EntireRow.Hidden = True
        Else
        Célula.EntireRow.Hidden = False
        End If

    Next Célula

     

    'Ocultar linhas 51 e 52 se as células contiverem um string vazio
    Set Intervalo = [A51:A52]

    For Each Célula In Intervalo

        If Célula = "" Then
        Célula.EntireRow.Hidden = True
        Else
        Célula.EntireRow.Hidden = False
        End If

    Next Célula

    End Sub

     

     


    [ ]s

    terça-feira, 29 de julho de 2008 12:17
  • Adilson, tá funcionando blz pro intervalo A32:A38, mas pro intervalo A51:A52 ela só re-exibe (se oculto manualmente), não oculta.

     

    Sds

    Jerson

     

    terça-feira, 29 de julho de 2008 13:46
  • Modifiquei o evento de SelectionChange para Change.

    Veja se agora está de acordo:

    Code Snippet

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Intervalo As Range
    Dim Célula As Range

    'Ocultar linhas de 32 a 38 se as células contiverem um string vazio
    Set Intervalo = [A32:A38]

    For Each Célula In Intervalo

        If Célula = "" Then
        Célula.EntireRow.Hidden = True
        Else
        Célula.EntireRow.Hidden = False
        End If

    Next Célula

     

    'Ocultar linhas 51 e 52 se as células contiverem um string vazio
    Set Intervalo = [A51:A52]

    For Each Célula In Intervalo

        If Célula = "" Then
        Célula.EntireRow.Hidden = True
        Else
        Célula.EntireRow.Hidden = False
        End If

    Next Célula

    End Sub

     

     

     

    [ ]s

     

    terça-feira, 29 de julho de 2008 16:46
  • Adilson, ainda não foi dessa vez... percebi que o intervalo A32:A38 funciona porque a fórmula neste intervalo é uma PROCV e quando retorna "" é porque a célula na origem está mesmo vazia.

    Não é o caso do intervalo A51:A52, que utiliza SE e retorna "" quando o resultado é FALSO. Assim mesmo retornando "" a célula na origem contém dados. Fiz um teste deletando a fórmula de A51:A52 e macro funcionou. Seria este o problema?

     

    Sds

    Jerson

    quarta-feira, 30 de julho de 2008 13:31
  • Olá, Jerson.

    Sinceramente não sei dizer o que está havendo por que não faz sentido.

    Rodei a macro em cima do arquivo que vc me enviou e rodou perfeitamente, em ambos os intervalos.

    Como último teste, peço que modifique as fórmulas que contém o PROCV de forma que retornem "-" caso não seja encontrado nenhum valor e para o intervalo [A51:52] use "-" como condição de teste de valor da célula,

    Desta forma o codigo fica:

     

    Code Snippet

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Intervalo As Range
    Dim Célula As Range

    'Ocultar linhas de 32 a 38 se as células contiverem um string vazio
    Set Intervalo = [A32:A38]

    For Each Célula In Intervalo

        If Célula = "" Then
        Célula.EntireRow.Hidden = True
        Else
        Célula.EntireRow.Hidden = False
        End If

    Next Célula

     

    'Ocultar linhas 51 e 52 se as células contiverem um string vazio
    Set Intervalo = [A51:A52]

    For Each Célula In Intervalo

        If Célula = "-" Then
        Célula.EntireRow.Hidden = True
        Else
        Célula.EntireRow.Hidden = False
        End If

    Next Célula

    End Sub

     

     

     

    [ ]s

     

    quinta-feira, 31 de julho de 2008 10:48
  • Olá Adilson,

     

    De repente me deu um clic... "e se eu trocasse o "-" por 0?" Não é que funcionou?

     

    Mais uma vez muito obrigado pela paciência e persistencia em em ajudar.

     

     

    Sds

    Jerson

     

    quinta-feira, 31 de julho de 2008 11:58