locked
ALTURA AUTOMÁTICA DA LINHA RRS feed

  • Pergunta

  • Bom dia, amigos!

     

    Existe uma formatação que possibilite a célula assumir automaticamente a altura de acordo com a quantidade de dados nela contidos?

     

    Sds

    Jerson

     

     

    segunda-feira, 3 de março de 2008 12:42

Respostas

  • Olá, Jerson.

    O código a ser inserido para a Plan2 do arquivo Sample2 é:

    Verifque se funciona da forma que vc quer.

    Se estiver tudo ok, agora podemos fechar o post.

    Esse demorou...

    Code Snippet

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Altura
    Dim N As Integer, k As Integer, i As Integer
       
        'Nº de caracteres da expressão da célula H16
        N = Len(Range("H16"))
        'Zera o contador de vírgulas
        k = 0
        'Determina o nº de vírgulas no conteúdo de H16
        For i = 1 To N
        If Mid(Range("H16"), i, 1) = "," Then k = k + 1
        Next i
        'Determina o nº de registros no conteúdo de H16
        k = k + 1
        'Determina a altura atual da linha para exibir cada 5 registros
        Altura = 15
        'Ajusta a altura com base no nº de registros
        Rows(16).RowHeight = Altura * (Int(k / 5) + 1)
    End Sub

     

     [ ]s

    quinta-feira, 13 de março de 2008 18:21

Todas as Respostas

  • JVieira,

     

    Veja se resolve o problema:

     

    Selecione a(s) celula(s)

    Selecione a opção no Menu: Formatar - Celular, aba Alinhamento, opção Quebrar texto Automaticamente

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

     

    segunda-feira, 3 de março de 2008 12:47
  •  Laercio da Silva Freitas wrote:

     

    Selecione a(s) celula(s)

    Selecione a opção no Menu: Formatar - Celular, aba Alinhamento, opção Quebrar texto Automaticamente

     

     

    Laercio,

     

    A célula já está formatada com quebra automática de texto, mas quando a quantidade de dados produz mais que uma linha, a linha não assume a altura necessária para mostrar todos os dados.

     

    Sds

    Jerson

    segunda-feira, 3 de março de 2008 13:00
  • JVieira,

     

    Um link com informações sobre formatação da altura da linha

    http://www.polvo.udesc.br/apostilas/excel/ex12.htm

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=2939401&SiteID=21

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

     

    segunda-feira, 3 de março de 2008 13:24
  • Sub Macro1()
        Cells.Select
        Cells.EntireRow.AutoFit
    End Sub

    Ou..

       Cells.EntireCollum.AutoFit

    isso que vc precisa?!!??!

    Vc pode também variar a Range...
    segunda-feira, 3 de março de 2008 13:31
  •  Hideo Kawashima wrote:

    isso que vc precisa?!!??!

    Vc pode também variar a Range...

     

    Hideo,

     

    Não é esta exatamente esta a minha necessidade. Vou tentar me explicar melhor:

     

    Tenho na Plan2 a célula A1 que contém uma fórmula PROCV (=PROCV(D2;Plan1!A2:B6;2), que busca os dados na Plan1.

    Na coluna A da Plan1, eu tenho datas, apenas o dia, de 1 a 30. Na coluna B eu tenho "nomes" de equipamentos que são compostos sempre de 11 dígitos. Dependendo do dia, eu posso ter 1 ou N equipamentos movimentados.

     

    Na célula D2 da Plan2, eu insiro a data (de 1 a 30) e a fórmula me retorna, na A1, o nome de todos os equipamentos movimentados nesta data. Como já mencionei, eu posso ter um ou N equipamentos movimentados por dia. Eu formatei A1 com quebra automática de texto para mostrar até 5 equipamentos por linha. Quando tenho mais de 5, a altura da linha já não é suficiente para mostrar todos.

    Eu preciso que a célula assuma, automaticamente, a altura necessária para mostrar todos os equip., sempre que a quantidade for maior que 5. Got it?

     

    Sds

    Jerson

    segunda-feira, 3 de março de 2008 15:09
  • Columns("A:A").ColumnWidth = 10
        Cells.EntireRow.AutoFit

    Vou tentar dar mais um tiro...
    Resumindo.. aqui definimos uma largura fixa para os 11 caracteres obrigatórios
    E depois.. um autofit na altura, se eu entendi.. acho que vai dar certo...
    Como é puxado os nomes dos equipamentos?!?
    segunda-feira, 3 de março de 2008 16:11
  • Jerson

    Pensei em outra abordagem para a questão:

    Code Snippet

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Altura
    Dim NValores As Integer

    If Not IsEmpty(Intersect(Target, Range("A1"))) Then
    NValores = 8 'Nº de registros consolidados no Range("A1")
    Altura = Target.Height
    If NValores > 5 Then Target.RowHeight = Altura * NValores / 5
    End If
    End Sub

     

     

    Ficou pendente saber como vc sabe quantos registros aparecem na célula e repassar para a atribuição de NValores. Vc controla esta variável?

     

    [ ]s

    segunda-feira, 3 de março de 2008 17:01
  •  Hideo Kawashima wrote:

    Como é puxado os nomes dos equipamentos?!?

     

    Através da fórmula PROCV. Por isso acho que a formatação da altura da linha não vai "rolar" através de macro.

     

     

    Sds

    Jerson

    segunda-feira, 3 de março de 2008 17:56
  •  Adilson Soledade wrote:

    Ficou pendente saber como vc sabe quantos registros aparecem na célula e repassar para a atribuição de NValores. Vc controla esta variável?

    [ ]s

     

    Adilson,

     

    O número de registro eu controlo pela largura da coluna.

     

     

    Sds

    Jerson

    segunda-feira, 3 de março de 2008 18:01
  • Vou reformular a pergunta:

    A função PROCV retorna um registro. Se vc está retornando N registros está utilizando outro artifício e deve separar cada valor retornado por uma quebra de linha, ou outro caractere.

    De que forma está retornando os N valores para uma mesma célula.

    [ ]s

     

    segunda-feira, 3 de março de 2008 18:21
  •  Adilson Soledade wrote:

    Vou reformular a pergunta:

    A função PROCV retorna um registro. Se vc está retornando N registros está utilizando outro artifício e deve separar cada valor retornado por uma quebra de linha, ou outro caractere.

    De que forma está retornando os N valores para uma mesma célula.

    [ ]s

     

     

    Adilson,

     

    Enviei para seu email uma planilha sample. Dê uma olhada e você vai entender melhor.

     

     

    Sds

    Jerson

    segunda-feira, 3 de março de 2008 19:54
  • Jerson,

    Dei uma olhada na tua planilha e montei o código abaixo que passou nos testes que realizei.

    Verifique se te atende.

    Code Snippet

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Altura
    Dim N As Integer, k As Integer, i As Integer

        'Ajusta a largura da coluna A, para exibir um valor por linha
        Columns("A:A").ColumnWidth = 13
        'Nº de caracteres da expressão da célula A1
        N = Len(Range("A5"))
        'Zera o contador de vírgulas
        k = 0
        'Determina o nº de vírgulas no conteúdo de A1
        For i = 1 To N
        If Mid(Range("A5"), i, 1) = "," Then k = k + 1
        Next i
        k = k + 1
        'Determina a altura atual da linha para exibir cada registros
        Altura = 12.75
        'Ajusta a altura com base no nº de registros
        Range("A5").RowHeight = Altura * k
    End Sub

     

     

    [ ]s

    terça-feira, 4 de março de 2008 00:39
  • Ao invés de fazer uma célula conter n equipamentos, em minha opinião ficaria beeemmm mais simples na tua origem você colocar a data repetida para cada novo equipamento, e depois usar o recurso de subtotal do Excel.

    Ficaria mais facilmente manipulável e evitaria que a célula ficasse com uma altura muito grande (no máximo são 409 pontos).

    Uma dica que pode ser útil é pensar se, ao invés de criar uma solução muito "sofisticada" para um relatório, se de repente não é mais simples e seguro assegurar que tua base de dados esteja de uma forma mais amigável.

    Pense sempre que a base de dados deva ser algo muito parecido com um banco de dados. Se isso estiver legal, você consegue extrair qualquer tipo de informação, por exemplo, em que dias você movimentou o equipamento x.

    Usando muitas macros, você vai precisar de uma macro para cada visualização de dados...


    A estrutura ideal seria algo assim:

    Data   Equipamento
    7/3     x
    7/3     y
    7/3     z
    8/3     x

    E por aí vai. Daí nem precisa mais de PROCV. Vai usar subtotal ou tabela dinâmica.

    sexta-feira, 7 de março de 2008 17:00
  •  Adilson Soledade wrote:

    Jerson,

    Dei uma olhada na tua planilha e montei o código abaixo que passou nos testes que realizei.

    Verifique se te atende.

     

    Adilson,

     

    Desculpe-me a demora da resposta, é que estive viajando desde terça.

    Bem amigo, desculpe minha ignorancia, mas não entendi uma coisa:

    se neste caso eu apenas insiro a data na C3 para ter o resultado na A5, como faço para que a macro seja executada?

     

    Sds

    Jerson

     

    sexta-feira, 7 de março de 2008 23:34
  • Olá, Jerson.

    Faça o seguinte:

    1. Clique com o botão direito na aba da planilha que contém as células a serem ajustadas.

    2. Selecione a opção exibir código.

    3. Copie e cole o código que poste.

    Esse tipo de código é chamado captura de evento. Agora toda vez que o valor da célula for modificado a macro é executada, sem que seja necessário acionar qq comando.

    [ ]s

    sábado, 8 de março de 2008 00:33
  •  Fábio Vianna wrote:
    Ao invés de fazer uma célula conter n equipamentos, em minha opinião ficaria beeemmm mais simples na tua origem você colocar a data repetida para cada novo equipamento, e depois usar o recurso de subtotal do Excel.

    Ficaria mais facilmente manipulável e evitaria que a célula ficasse com uma altura muito grande (no máximo são 409 pontos).

    Uma dica que pode ser útil é pensar se, ao invés de criar uma solução muito "sofisticada" para um relatório, se de repente não é mais simples e seguro assegurar que tua base de dados esteja de uma forma mais amigável.

    Pense sempre que a base de dados deva ser algo muito parecido com um banco de dados. Se isso estiver legal, você consegue extrair qualquer tipo de informação, por exemplo, em que dias você movimentou o equipamento x.

    Usando muitas macros, você vai precisar de uma macro para cada visualização de dados...


    A estrutura ideal seria algo assim:

    Data   Equipamento
    7/3     x
    7/3     y
    7/3     z
    8/3     x

    E por aí vai. Daí nem precisa mais de PROCV. Vai usar subtotal ou tabela dinâmica.

     

    Caro Fabio,

     

    Agradeço sua sugestão, mas devido a quantidade de equips. que são manipulados por dia, fica inviável aplicá-la,

    pois o relatório final ficaria muito extenso. Outro fator é que o número do equip. tem de constar do relatório, não apenas a quantidade. Foi por isso que optei por colocar cinco equips. por linha.

     

    Um abraço

     

    Sds

    Jerson

    sábado, 8 de março de 2008 12:39
  •  JVieira wrote:
     

    Adilson,

     

    Desculpe-me a demora da resposta, é que estive viajando desde terça.

    Bem amigo, desculpe minha ignorancia, mas não entendi uma coisa:

    se neste caso eu apenas insiro a data na C3 para ter o resultado na A5, como faço para que a macro seja executada?

     

    Sds

    Jerson

     

     

     

    Sds

    Jerson

    quarta-feira, 12 de março de 2008 16:33
  •  JVieira wrote:
     JVieira wrote:
     

    Adilson,

     

    Desculpe-me a demora da resposta, é que estive viajando desde terça.

    Bem amigo, desculpe minha ignorancia, mas não entendi uma coisa:

    se neste caso eu apenas insiro a data na C3 para ter o resultado na A5, como faço para que a macro seja executada?

     

    Sds

    Jerson

     

     

     

    Sds

    Jerson

     

    Essa eu já tinha respondido. Segue mais uma vez. Qq dúvida, me avisa

    Olá, Jerson.

    Faça o seguinte:

    1. Clique com o botão direito na aba da planilha que contém as células a serem ajustadas.

    2. Selecione a opção exibir código.

    3. Copie e cole o código que poste.

    Esse tipo de código é chamado captura de evento. Agora toda vez que o valor da célula for modificado a macro é executada, sem que seja necessário acionar qq comando.

    [ ]s

    quarta-feira, 12 de março de 2008 17:07
  •  Adilson Soledade wrote:
     

     

    Essa eu já tinha respondido. Segue mais uma vez. Qq dúvida, me avisa

     

    Desculpe, amigo, não me liguei que estava na página 2.

     

    Sds

    Jerson

    quinta-feira, 13 de março de 2008 14:37
  • Adilson,

     

    O código funciona perfeitamente, obrigado. Não querendo abusar de sua paciência, tenho uma outra situação em que gero uma fatura. Só que neste caso o número dos equipamentos ficam numa célula mesclada (H16:BD16). Tentei utilizar o mesmo código fazendo as devidas alterações (onde achei necessário), mas sem sucesso.

    Mandei a planilha Sample2 pro seu email.

     

    Um abraço,

     

    Jerson

    quinta-feira, 13 de março de 2008 17:12
  • Olá, Jerson.

    O código a ser inserido para a Plan2 do arquivo Sample2 é:

    Verifque se funciona da forma que vc quer.

    Se estiver tudo ok, agora podemos fechar o post.

    Esse demorou...

    Code Snippet

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Altura
    Dim N As Integer, k As Integer, i As Integer
       
        'Nº de caracteres da expressão da célula H16
        N = Len(Range("H16"))
        'Zera o contador de vírgulas
        k = 0
        'Determina o nº de vírgulas no conteúdo de H16
        For i = 1 To N
        If Mid(Range("H16"), i, 1) = "," Then k = k + 1
        Next i
        'Determina o nº de registros no conteúdo de H16
        k = k + 1
        'Determina a altura atual da linha para exibir cada 5 registros
        Altura = 15
        'Ajusta a altura com base no nº de registros
        Rows(16).RowHeight = Altura * (Int(k / 5) + 1)
    End Sub

     

     [ ]s

    quinta-feira, 13 de março de 2008 18:21
  • Show de bola, Adilson!!!

     

    Muito obrigado e desculpe a amolação.

     

    Um grande abraço,

     

    Jerson

    sexta-feira, 14 de março de 2008 20:06