Encaro a seguinte situação: minha intenção é popular uma listbox com dados de uma planilha, estes dados são mostrados a partir de um evento change na minha combobox.
Atualmente ele me retorna apenas uma linha, quando na verdade eu preciso que ele retorne todas as linhas existentes que correspondam a seleção da minha combobox.
Este é o código para o evento change:
Private Sub Combobox1_change()
If ComboBox1.ListIndex = -1 Then Exit Sub
ListBox1.Clear
Dim DataRange As Range, rngArea As Range
Dim DataSet As Variant
With ws
.AutoFilterMode = False
ultimalinha = .Range("A" & .Rows.Count).End(xlUp).Row
With .Range("A1:A" & ultimalinha)
.AutoFilter Field:=1, Criteria1:=ComboBox1.Value
On Error Resume Next
Set DataRange = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
On Error GoTo 0
End With
If Not DataRange Is Nothing Then
Set DataRange = .Range("B2:C" & ultimalinha).SpecialCells(xlCellTypeVisible)
ReDim DataSet(1 To DataRange.Areas.Count + 1, 1 To 110)
j = 1
For Each rngArea In DataRange.Areas
For i = 1 To 110
DataSet(j, i) = rngArea.Cells(, i).Value2
Next i
j = j + 1
Next rngArea
With ListBox1
End With
ListBox1.LIST = DataSet
End If
.AutoFilterMode = False
End With
End Sub
Como eu faria para popular a listbox com mais de apenas uma linha por vez?
ListBox1.List = DataSet
, eu useiForm1.ListBox1.List = DataSet
. Foi só adicionar a referência ao nome do formulário antes.DataSet
; coloque um ponto de parada emListBox1.LIST = DataSet
e execute seu código. Quando parar ali, veja o conteúdo de DataSet, pra debugar se o problema está no preenchimento da variávelDataSet
ou na hora de compor a lista noListBox
.