Usuário com melhor resposta
ALTURA AUTOMÁTICA DA LINHA

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 SnippetPrivate 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 SnippetPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Altura
Dim NValores As IntegerIf 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 SubFicou 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 SnippetPrivate 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 SnippetPrivate 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