none
Listbox com 2 colunas - carrega valores condicinais RRS feed

  • 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

    terça-feira, 23 de dezembro de 2014 17:53

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

    quinta-feira, 8 de janeiro de 2015 12:40
    Moderador

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

    terça-feira, 23 de dezembro de 2014 19:20
  • 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,

    segunda-feira, 29 de dezembro de 2014 11:20
  • 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

    quinta-feira, 8 de janeiro de 2015 12:40
    Moderador