Arquivo da tag: ListBox

VBA – Preenchendo um listbox com mais de 10 colunas

Eis um tópico polêmico, como não poderia deixar de ser. E tem motivação melhor para gerar um artigo? Claro que não! Então vamos em frente!

Muitos que começam a explorar um pouco mais o uso do ListBox em seus formulários VBA percebe que ele tem muito mais a oferecer do que uma simples lista de dados. Pessoalmente, no VBA, eu uso ele como controle oficial até mesmo para grids. Os motivos eu explico outra hora.

Voltando ao assunto do título, muitos culpam o ListBox por ser um controle incompleto por ele não permitir adicionar mais de 10 colunas nele. Isso é verdade, mas também não é. Existe sim essa limitação, mas ela está atrelada ao como você coloca os dados no Listbox. Como tudo no mundo da programação, o melhor jeito de demonstrar isso é por um exemplo. Pois bem, considere a seguinte planilha:

VBA - Preenchendo um listbox com mais de 10 colunas

Aqui temos 10 colunas e algumas linhas. Sem enrolação, crie um userform, adicione um listbox nele (com uma largura suficiente para ver as colunas) e coloque o seguinte código:

Private Sub UserForm_Initialize()
    With Planilha1
        Me.ListBox1.ColumnCount = .UsedRange.Columns.Count
        For linha = 1 To .UsedRange.Rows.Count
            ListBox1.AddItem ""
            For coluna = 1 To .UsedRange.Columns.Count
                ListBox1.List(linha - 1, coluna - 1) = .Cells(linha, coluna)
            Next coluna
        Next linha
    End With
End Sub

Onde Planilha1 é o nome do objeto da sua planilha. Sem ir muito a fundo no código, ele faz dois laços For, um para as linhas da planilha e um para as colunas. A propriedade UsedRange define a área usada da planilha, ou seja, vai funcionar bem para planilha que só contenha dados como o exemplo.

Se rodar o codigo, o resultado será isso:

VBA - Preenchendo um listbox com mais de 10 colunas 2

O listbox funcionando. Lindo! Agora, vamos ao problema. Se adicionarmos mais uma coluna na nossa planlha, como mostra abaixo:

VBA - Preenchendo um listbox com mais de 10 colunas 3

Receberemos o seguinte erro:

VBA - Preenchendo um listbox com mais de 10 colunas 4

Se usado dessa forma, ou seja, adicionar itens através do método AddItem, o Listbox se limitará a no máximo 10 colunas.

Existem duas formas de contornar isso:

  1. Usar a propriedade RowSource (fuja!)
  2. Usar arrays (eba!)

Obviamente, vamos para a segunda. Sem alterar a planilha, altere o código do formulário para o seguinte:

Private Sub UserForm_Initialize()
    Dim arrayItems()
    With Planilha1
        ReDim arrayItems(1 To .UsedRange.Rows.Count, 1 To .UsedRange.Columns.Count)
        Me.ListBox1.ColumnCount = .UsedRange.Columns.Count
        For linha = 1 To .UsedRange.Rows.Count
            Me.ListBox1.AddItem
            For coluna = 1 To .UsedRange.Columns.Count
                arrayItems(linha, coluna) = .Cells(linha, coluna).Value
            Next coluna
        Next linha
        
        Me.ListBox1.List = arrayItems()
    End With
End Sub

Execute o formulário novamente e….

VBA - Preenchendo um listbox com mais de 10 colunas 5
Voilá! Um ListBox com mais de 10 colunas!

O que aconteceu? Ao invés de jogar os dados direto no listbox, alimento um array com os dados e depois jogo os dados no Listbox através da propriedade List. O ListBox é esperto para entender um Array, o que não é o caso do AddItem.  O Array, obviamente, tem as dimensões da área ocupada na planilha (mais uma vez , o UserRange é utilizado aqui).

É isso. Bom proveito!

Download do arquivo:

VBA – Preenchendo um listbox com mais de 10 colunas.zip (265.24 KiB)

Modelo – Mover Dados entre duas ComboBox´s ou ListBox´s

Boa tarde a todos!

Estou trazendo mais um modelo, utilizando os velhos controles ComboBox e ListBox.

Dessa vez, criei uma estrutura que nos possibilita pegar os dados de um desses dois controles e enviar para outro, conforme pode ser visto na imagem abaixo.

Tela com 2 ListBox.jpg
Tela Demostração

Espero que esse modelo possa ajudar aos colegas, em seus desenvolvimentos no dia a dia.

Excelente semana a todos e forte abraço.

VBA – Arrastar Dados para ListBox

… e lá vem mais de nossa incansável comunidade do fórum! Dessa vez, é o colega joseA é quem assina.

Segundo o próprio, seguindo a Ajuda do VBA (lembra? Aquela que aparece quando você clica em F1, normalmente sem querer…). O resultado é este modelo simpático de arrastar itens entre controles ListBox. Confira!

Arrastar dados no ListBox
Arrastar dados no ListBox

Download da planilha

ArrastarListboxJoseA.zip (17.41 KiB)

Tópico do Fórum

http://www.tomasvasquez.com.br/forum/viewtopic.php?t=1715&p=8178

Bom proveito!

VBA – Scroll Mouse em ListBox

Mais uma do nosso fórum!

Estava revendo alguns arquivos antigos do excel armazenados no PC, são tantos que nos esquecemos do que temos e deixamos alguns interessantes para traz, e encontrei um que habilita o Scroll do Mouse dentro de um Listbox quando este ultrapassar a quantidade de itens, então segue o exemplo a quem possa vir a precisar.

Nativamente, o controle ListBox no VBA não suporta tal funcionalidade.

Bom proveito!

Download da Planilha

ScrollListbox.rar
Scroll Mouse em ListBox