Notifications
Clear all

Preencher ListBox

7 Posts
2 Usuários
0 Reactions
1,800 Visualizações
(@schramm)
Posts: 33
Eminent Member
Topic starter
 

Boa noite amigos!

Estou com uma dificuldade, pode ser simples mas não consegui resolve-la. Então, tenho um userform com duas textbox e uma listbox, essa listbox recebe os dados de duas colunas, Coluna Q e R, até aí tudo bem, porém o código que estou usando trás para a listbox todas as linhas, mesmo que não preenchidas, das colunas Q e R, e eu gostaria que retornasse apenas as linhas conforme forem sendo preenchidas. Será que alguém consegue me ajudar?
Obs: Com um duplo click sobre um dos dados, eles devem continuar retornando para as textbox.

Segue em anexo minha planilha.
Agradeço desde já! :D

 
Postado : 26/03/2016 7:27 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Para preencher o listbox somente com os dados ignorando as linhas em branco abaixo, substitua a rotina que preenche o listbox pela a abaixo.
Uma observação sobre o cabeçalho, é que o mesmo só aparece quando utilizamos o Rowsource, e na rotina que estou passando você em de adicionar dois Labels acima e preenche-lo :

Private Sub UserForm_Initialize()
    Dim cell As Range
    Dim Rng As Range
    
    With ThisWorkbook.Sheets("BD_Lavoura")
        Set Rng = .Range("Q2", .Range("Q2").End(xlDown))
    End With
    
    'Altere os nomes dos Label de acordo com os que adicionar
    Label26.Caption = Range("Q1").Value
    Label27.Caption = Range("R1").Value
    
    For Each cell In Rng.Cells
        With Me.ListBox1
            .ColumnCount = 2 'Define a qde de Colunas no Listbox

            .AddItem cell.Value
            .List(.ListCount - 1, 1) = cell.Offset(0, 1).Value 'Coluna 1
            .List(.ListCount - 1, 2) = cell.Offset(0, 2).Value 'Coluna 2
        End With
    Next cell
    
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/03/2016 8:52 pm
(@schramm)
Posts: 33
Eminent Member
Topic starter
 

Boa noite Mauro!
Substituí a rotina, porém, não consigo executar, pois está dando o seguinte erro: "Erro em tempo de execução 424: O objeto é obrigatório"

 
Postado : 26/03/2016 9:19 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Você alterou os nomes dos Label26 e Label27 pelos nomes dos que você adicionou ?

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/03/2016 9:25 pm
(@schramm)
Posts: 33
Eminent Member
Topic starter
 

Desculpa Mauro, foi um erro de digitação.. deu certo agora! Muito Obrigado.

 
Postado : 27/03/2016 10:22 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Reabri o tópico devido a msg em PVT :

Boa noite Mauro!
Desculpa te chamar no particular, mas me surgiu uma dificuldade sobre o preenchimento da listbox que me ajudaste. Está funcionando muito bem tendo 2 ou mais dados na planilha, porém, se excluir da planilha deixando apenas 1 talhão e 1 hectare da erro e o excel trava, teria como me ajudar com mais essa?

Schramm, o erro se dá devido eu não ter feito nenhum tratamento quanto a qde de itens, fiz e não tstei, e mesmo que não tenha nenhum dado tambem teremos o erro.

Explicando o porque do erro :
Como temos a instrução : Set Rng = .Range("Q1", .Range("Q1").End(xlDown)), ela define o Range iniciando em Q1, e na linha : For Each cell In Rng.Cells é preenchido o listbox, só que, se tivermos somente dados na linha 2 ou se não tivermos, o Range será definido de "Q1" até a última linha da planilha.

Então para evitarmos futuros problemas, troque a rotina pela a abaixo, veja que nesta eu não coloquei instrução para preencher os Labels com o cabeçalho, pois, já que será sempre o mesmo, é só definir o caption de cada um direto na propriedade.

Private Sub UserForm_Initialize()
    Dim UltimaLinha, i  As Integer
    
    ListBox1.ColumnCount = 2
    ListBox1.Clear
    
    UltimaLinha = Sheets("BD_Lavoura").Cells(Cells.Rows.Count, 17).End(xlUp).Row
    
    If UltimaLinha <= 1 Then Exit Sub

        For i = 2 To UltimaLinha
            
            With Me.ListBox1
                .AddItem Sheets("BD_Lavoura").Range("Q" & i).Value
                .List(ListBox1.ListCount - 1, 1) = Sheets("BD_Lavoura").Range("R" & i).Value
            End With
        Next
    
End Sub

Faça os testes e veja se agora está correto.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 28/03/2016 6:24 pm
(@schramm)
Posts: 33
Eminent Member
Topic starter
 

Boa noite Mauro! Entendi tua explicação, agora funcionou perfeitamente! Aos poucos vou aprendendo e pegando o jeito, sou leigo nesse assunto ainda.. Muito Obrigado pela ajuda e pela paciência, Te agradeço mesmo!

 
Postado : 28/03/2016 7:21 pm