Ir ao conteúdo
  • Cadastre-se

Dica interessante como alinhar uma coluna em um ListBox


Posts recomendados

É sempre bom colaborar com os colegas, pois muitas vezes procuramos uma solução prática e rápida. Considerando que tenha já alguma familiaridade com VBA no Excel. Segue um mini tutorial sobre como alinhar à direita valores em um ListBox, montado com uma matriz em múltiplas colunas, acompanhe:

Crie uma pequena planilha como esta:

Planilha1.png

Nomeie um intervalo na planilha que no código depois será visto que vai ajudar

muito na verificação de quantos dados estão ocupando as linhas da planilha. No caso o vetor chamei de VT_DATA ... veja a ilustração:

Nomeando%2520C%25C3%25A9lulas.png

feito isso, abra seu editor VBA. Inclua um formulário semelhante a este da figura com as medidas de Height = 212 e Width = 552

Formul%25C3%25A1rio%2520FrmLista.png

A name do Form é FrmLista. Depois inseri um objeto ListBox no Form, que denominei de LstView. Observe as alterações em algumas propriedades importantes no ListBox:

Formul%25C3%25A1rio%2520com%2520LISTBOX.png

Criei também um módulo que chamei de ModArrayList veja a ilustração:

M%25C3%25B3dulo.png

Inserir um botão na planilha a partir dos ActiveX disponível na Guia Desenvolvedor do Excel, para chamar o formulário.

Inclus%25C3%25A3o%2520de%2520bot%25C3%25A3o.png

Bom, já temos um pequena planilha, temos um formulário com um ListBox devidamente configurado as propriedades, temos um módulo onde será criada uma função que vai gerar a matriz para adicioná-la ao ListBox.

Vamos ao código:

no escopo do módulo...

Function Listando()
Dim linhasPlan As Long
Dim matriz()
Dim lin As Long
Dim col As Integer
Dim valorStr As String
'Fazendo a leitura de quantas linhas de dados _
tenho na planilha ativa, a estando no módulo _
uma forma de mostrar qual é a planilha ativa _
é evocando o objeto que interessa, no caso do _
exemplo é "Plan1".

'Range("VT_DATA"), está relacionando na propriedade _
Range a coleção de células selecionadas e nomeadas _
com VT_DATA. Isso é feito na "caixa de nome" ao lado _
da "caixa de formulas" [fx]. Isso assegura ter a contagem _
de linhas corretas, pois certamente toda descrição de _
duplicata terá uma data.

linhasPlan = WorksheetFunction.CountA(Sheets("plan1").Range("VT_DATA"))

'agora temos condição de redimensionarmos a matriz

ReDim matriz(lin To linhasPlan, col To 3)

'limpa o objeto ListBox

FrmLista.LstView.Clear
'limpando a matriz

For i = 0 To linhasPlan
For j = 0 To 2
matriz(i, j) = Empty
Next j
Next i

'Montando o cabeçalho
matriz(0, 0) = "DATA"
matriz(0, 1) = "DESCRIÇÃO"
matriz(0, 2) = "VALOR EM R$"

'acrescentando os dados da Worksheet na matriz
For i = 1 To linhasPlan
For j = 0 To 2
If j = 2 Then 'coluna de valores
'O Valor é convertido para String que formatado
'a variável valorStr recebe o Valor ajustado com
'a função Space onde tenho uma expressão que
'verifica com a função Len o tamanho da String
'menos 10 caracteres sugeridos, assim completa
'com espaços em branco a frente do valor alinhando
'todos os valores a direita.
valorStr = Format(CStr(Sheets("plan1").Cells(i + 1, j + 1)), "###,##0.00")
matriz(i, j) = Space(10 - Len(valorStr)) & valorStr
Else
matriz(i, j) = Sheets("plan1").Cells(i + 1, j + 1)
End If

Next j
Next i
Listando = matriz
End Function

Agora o código no formulário...

Private Sub LstView_Click()
If LstView.ListIndex <> 0 Then
MsgBox "Estou na linha " & LstView.ListIndex & vbLf & vbLf & _
"Informações da linha selecionada: " & vbLf & _
"Data: " & LstView.List(LstView.ListIndex, 0) & vbLf & _
"Descrição: " & LstView.List(LstView.ListIndex, 1) & vbLf & _
"Valor: " & LTrim(LstView.List(LstView.ListIndex, 2)), vbInformation, "MENSAGEM"

End If
End Sub

Private Sub UserForm_Activate()
'Ao clicar no botão que está na planilha
'é acessado o módulo onde o retorno da função Listando
'carrega o LstView.
LstView.List = ModArrayList.Listando
End Sub

e por último o código do botão que se encontra na planilha...

Private Sub CmdForm_Click()
FrmLista.Show vbModeless
End Sub

Pronto, assim teremos o seguinte resultado na tela ao clicarmos

no botão Formulário que está na planilha:

Resultado.png

Bom, qualquer dúvida ou se passou alguma informação em branco, comentem.

Espero poder ter ajudado alguns colegas em prováveis dúvidas.

:rolleyes:

Link para o comentário
Compartilhar em outros sites

  • 5 anos depois...

Bom dia

Primeiro, parabéns pelo exemplo. Muito Show.

 

Tenho uma pergunta: Tem como colocar filtros neste pesquisa. Tipo: Duplicatas que contenham os dígitos "02". Irão retornar 2 registros.

O que estou fazendo é inserindo vários filtros. Estava utilizando Listview, porém tem muitas maquinas que apresentam problemas e por isto resolvi mudar para listbox.

 

Obrigado

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...