0

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?

5
  • Para mim, o código funcionou perfeitamente com uma mudança muito simples: em vez de ListBox1.List = DataSet, eu usei Form1.ListBox1.List = DataSet. Foi só adicionar a referência ao nome do formulário antes. Commented 14/02/2023 às 21:53
  • Era essa sua questão? Ou você está coletando menos dados do que devia? Commented 14/02/2023 às 21:54
  • @CésarRodriguez agradeço sua resposta. Infelizmente estou coletando menos dados do que devia. Veja.
    – Sena
    Commented 15/02/2023 às 12:42
  • Três sugestões de debug para editar e inserir na sua pergunta: 1. Confira se a ComboBox está executando o filtro corretamente, e explique quantas linhas seriam esperadas de acordo com o que você está selecionando na ComboBox. 2 Coloque um print de uma trecho de sua tabela de origem já filtrada conforme o valor do ComboBox. No seu código está como se fossem 110 colunas (e não linhas), o que me parece exagerado para colocar num ListBox. Commented 15/02/2023 às 12:48
  • 3. Faça uma inspeção de variáveis em DataSet; coloque um ponto de parada em ListBox1.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ável DataSet ou na hora de compor a lista no ListBox. Commented 15/02/2023 às 12:48

0

Você deve fazer log-in para responder a esta pergunta.

Pesquise outras perguntas com a tag .