Usuário com melhor resposta
Listbox com 2 colunas - carrega valores condicinais

Pergunta
-
Boa tarde a todos,
Bom gostaria de um suporte quanto ao seguinte problema. Tenho uma macro para povoar uma listbox que lê o arquivo, e adiciona somente as células não vazias, com uma condição baseada em uma coluna da tabela, de acordo com o código abaixo.
Dim i As Long Dim TextoCelula As String Set wbBD = Workbooks.Open("Banco de dados.xls", ReadOnly:=True) Set wsBD = wbBD.Worksheets("BD") wbBD.Windows(1).Visible = False i = 2 ListFor.Clear With wsBD While .Cells(i, 1).Value <> Empty If .Cells(i, 15).Value = Empty Then 'inclui somente linhas não concluídas TextoCelula = .Cells(i, 2).Value If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then ListFor.AddItem .Cells(i, 2) End If End If i = i + 1 Wend End With If Not wbBD Is Nothing Then wbBD.Saved = True wbBD.Close SaveChanges:=False End If Set wbBD = Nothing
Meu problema é que a listbox tem 2 colunas, e hoje eu preciso carregar o conteúdo da segunda coluna da planilha na coluna 0 da listbox, e o conteúdo da coluna 1 da planilha na coluna 1 da listbox, mantendo a leitura do arquivo, e a condicional.
Não estou conseguindo, e estou aqui batendo a cabeça.
Alguém poderia me ajudar?
Grato desde já.
Diogo Festa
Respostas
-
Tente algo como:
Sub pMain() Dim i As Long Dim TextoCelula As String Set wbBD = Workbooks.Open("Banco de dados.xls", ReadOnly:=True) Set wsBD = wbBD.Worksheets("BD") wbBD.Windows(1).Visible = False i = 2 ListFor.Clear With wsBD Do While .Cells(i, 1).Value <> Empty If .Cells(i, 15).Value = Empty Then 'inclui somente linhas não concluídas TextoCelula = .Cells(i, 2).Value If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then ListFor.AddItem ListFor.List(ListFor.ListCount - 1, 0) = .Cells(i, "A") ListFor.List(ListFor.ListCount - 1, 0) = .Cells(i, "B") End If End If i = i + 1 Loop End With If Not wbBD Is Nothing Then wbBD.Saved = True wbBD.Close SaveChanges:=False End If Set wbBD = Nothing End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator segunda-feira, 19 de janeiro de 2015 13:42
Todas as Respostas
-
Boa tarde Dfesta.
Minha sugestão é que vc realize a montagem dos dados num vetor e em seguida atribua esse vetor à sua Listbox. Dessa forma o processo fica bastante simples e é fácil ter controle sobre seus dados. Para atribuir basta:
ListBox1.List() = MyArray
Adicionalmente vc poderia utilizar a linha abaixo, mas por algum motivo que não consigo entender, os dados são transpostos no Listbox:
ListBox1.Column() = MyArray
Abraço.Filipe Magno
- Sugerido como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 27 de dezembro de 2014 16:52
-
Bom dia Filipe,
Muito obrigado pela sua resposta.
Eu estou tentando colocar os dados utilizando o myarray, mas não estou conseguindo usar a condicional, para que ele só carregue aquelas linhas que atenderem a um determinada condição...
Tem alguma ideia, pois eu esgotei as minhas...
Abraço,
-
Tente algo como:
Sub pMain() Dim i As Long Dim TextoCelula As String Set wbBD = Workbooks.Open("Banco de dados.xls", ReadOnly:=True) Set wsBD = wbBD.Worksheets("BD") wbBD.Windows(1).Visible = False i = 2 ListFor.Clear With wsBD Do While .Cells(i, 1).Value <> Empty If .Cells(i, 15).Value = Empty Then 'inclui somente linhas não concluídas TextoCelula = .Cells(i, 2).Value If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then ListFor.AddItem ListFor.List(ListFor.ListCount - 1, 0) = .Cells(i, "A") ListFor.List(ListFor.ListCount - 1, 0) = .Cells(i, "B") End If End If i = i + 1 Loop End With If Not wbBD Is Nothing Then wbBD.Saved = True wbBD.Close SaveChanges:=False End If Set wbBD = Nothing End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator segunda-feira, 19 de janeiro de 2015 13:42