none
Enviar dados da listbox para planilha - Excel VBA RRS feed

  • Pergunta

  • Boa Tarde,

    Preciso de ajuda para enviar dados de uma listbox para uma planilha. A listbox possui 5 colunas, quando clicar em um botão os dados da listbox deverá ser enviado para a planilha. Nesta planilha contém os cabeçalhos de acordo com as colunas do listbox.

    Toda vez em que os dados for gravados nesta planilha, deverá ser feito antes uma limpeza dos campos, exceto os da primeira linha da planilha, pois são as descrições do cabeçalho.

    Valeu!

    sábado, 1 de março de 2014 16:08

Respostas

  • aí as coisas mudam um pouco. segue os dados para colocar no commandbutton:

    Private Sub CommandButton1_Click()
    Call limpar 'chama a sub para limpar os dados
    
    oCol = 1
    lista = 0
    
    PreenchePedidos:
    With Sheets("Plan1") 'seleciona a planilha e insere os dados
    nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
    End With
    With Me.ListBox1
           For lCount = 0 To .ColumnCount
                   Sheets("Plan1").Cells(nextRow, oCol) = .List(lista, lCount)
                   oCol = oCol + 1
                   
        Next
            
            If .ListCount - 1 > lista Then
                oCol = 1
                lista = lista + 1
                GoTo PreenchePedidos
             Else
            ListBox1.Clear
            Unload Me
             Exit Sub
             
            End If
    
        End With
    
    
    End Sub

    falou!

    • Marcado como Resposta Everton_Delmiro quinta-feira, 6 de março de 2014 16:26
    sábado, 1 de março de 2014 21:29
  • Contribuindo

    Editar esta macro em um modulo e associar a um botão na plan1

    Sub GravaListBox()
        'Grava os dados da Listbox1(5 colunas) da Plan1 na Plan2
        'Na Plan2 - Grava nas colunas A a E a partir da Linha 2
        ' antes limpando todos dados gravados anteriormente
        Dim Ctd As Integer 'contador
        Dim Ctd1 As Integer
        Dim Nlin_LB As Integer 'Num linhas da ListBox
        Dim Nlin_PL As Long 'Num linha para Limpar/gravar
        Dim V_Plan2 As Worksheet
        Dim V_LBox As OLEObject
       
        Set V_Plan2 = Worksheets("Plan2")
        Set V_LBox = Worksheets("Plan1").OLEObjects("ListBox1")
       
        Nlin_LB = V_LBox.Object.ListCount - 1
       
        If Nlin_LB >= 0 Then
            'Verifica ultima linha com dados na Plan2
            Nlin_PL = V_Plan2.Cells(V_Plan2.Rows.Count, 1).End(xlUp).Row
            'Limpa Plan2
            V_Plan2.Range("A2:E" & Nlin_PL).ClearContents
            Nlin_PL = 2
            'Loop grava listbox na planilha
            For Ctd = 0 To Nlin_LB 'ctd numero de linhas da listbox
                For Ctd1 = 0 To 4  'ctd1 numero de colunas da listbox e Plan2
                    V_Plan2.Cells(Nlin_PL, Ctd1 + 1).Value = V_LBox.Object.List(Ctd, Ctd1)
                Next
                Nlin_PL = Nlin_PL + 1
            Next
            MsgBox "Conteudo da Listbox1 gravados na Plan2 com sucesso"
        Else
            MsgBox "ListBox vazia", vbOKOnly, "ATENÇÂO"
        End If
    End Sub

    Até

    Alberto

    • Marcado como Resposta Everton_Delmiro quinta-feira, 6 de março de 2014 16:26
    domingo, 2 de março de 2014 05:38

Todas as Respostas

  • Primeiro crie um módulo e dentro dele uma sub para limpar os dados:

    Sub limpar()
       Sheets("Plan1").Range("A2:E3").Select
       Selection.ClearContents
       Sheets("Plan1").Range("A2").Select
    End Sub

    depois coloque dentro do método click do botão que for usar estes dados.

    Private Sub CommandButton1_Click()
    Call limpar 'chama a sub para limpar os dados
    
    With Sheets("Plan1") 'seleciona a planilha e insere os dados
        .Cells(2, 1) = ListBox1.List(0, 0)
        .Cells(2, 2) = ListBox1.List(0, 1)
        .Cells(2, 3) = ListBox1.List(0, 2)
        .Cells(2, 4) = ListBox1.List(0, 3)
        .Cells(2, 5) = ListBox1.List(0, 4)
    End With
    End Sub

    Se for muitas colunas seria bom fazer um loop ao invés de escrever direto, mas como são só 5 colunas deixa assim que roda mais fácil.

    flw!

    sábado, 1 de março de 2014 20:14
  • Bruno,

    São 5 colunas mais diversas linhas, então os dados serão inseridos um abaixo do outro...verifica a primeira linha vazia e grava as informações.

    sábado, 1 de março de 2014 20:19
  • aí as coisas mudam um pouco. segue os dados para colocar no commandbutton:

    Private Sub CommandButton1_Click()
    Call limpar 'chama a sub para limpar os dados
    
    oCol = 1
    lista = 0
    
    PreenchePedidos:
    With Sheets("Plan1") 'seleciona a planilha e insere os dados
    nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
    End With
    With Me.ListBox1
           For lCount = 0 To .ColumnCount
                   Sheets("Plan1").Cells(nextRow, oCol) = .List(lista, lCount)
                   oCol = oCol + 1
                   
        Next
            
            If .ListCount - 1 > lista Then
                oCol = 1
                lista = lista + 1
                GoTo PreenchePedidos
             Else
            ListBox1.Clear
            Unload Me
             Exit Sub
             
            End If
    
        End With
    
    
    End Sub

    falou!

    • Marcado como Resposta Everton_Delmiro quinta-feira, 6 de março de 2014 16:26
    sábado, 1 de março de 2014 21:29
  • Contribuindo

    Editar esta macro em um modulo e associar a um botão na plan1

    Sub GravaListBox()
        'Grava os dados da Listbox1(5 colunas) da Plan1 na Plan2
        'Na Plan2 - Grava nas colunas A a E a partir da Linha 2
        ' antes limpando todos dados gravados anteriormente
        Dim Ctd As Integer 'contador
        Dim Ctd1 As Integer
        Dim Nlin_LB As Integer 'Num linhas da ListBox
        Dim Nlin_PL As Long 'Num linha para Limpar/gravar
        Dim V_Plan2 As Worksheet
        Dim V_LBox As OLEObject
       
        Set V_Plan2 = Worksheets("Plan2")
        Set V_LBox = Worksheets("Plan1").OLEObjects("ListBox1")
       
        Nlin_LB = V_LBox.Object.ListCount - 1
       
        If Nlin_LB >= 0 Then
            'Verifica ultima linha com dados na Plan2
            Nlin_PL = V_Plan2.Cells(V_Plan2.Rows.Count, 1).End(xlUp).Row
            'Limpa Plan2
            V_Plan2.Range("A2:E" & Nlin_PL).ClearContents
            Nlin_PL = 2
            'Loop grava listbox na planilha
            For Ctd = 0 To Nlin_LB 'ctd numero de linhas da listbox
                For Ctd1 = 0 To 4  'ctd1 numero de colunas da listbox e Plan2
                    V_Plan2.Cells(Nlin_PL, Ctd1 + 1).Value = V_LBox.Object.List(Ctd, Ctd1)
                Next
                Nlin_PL = Nlin_PL + 1
            Next
            MsgBox "Conteudo da Listbox1 gravados na Plan2 com sucesso"
        Else
            MsgBox "ListBox vazia", vbOKOnly, "ATENÇÂO"
        End If
    End Sub

    Até

    Alberto

    • Marcado como Resposta Everton_Delmiro quinta-feira, 6 de março de 2014 16:26
    domingo, 2 de março de 2014 05:38
  • Bruno está dando erro na linha: With Sheets("Plan1") 'seleciona a planilha e insere os dados...subscrito fora do intervalo
    segunda-feira, 3 de março de 2014 01:02
  • Tem que trocar o Plan1 pelo nome da sua planilha.
    segunda-feira, 3 de março de 2014 12:52
  • O erro está nesta linha : Sheets("REL_EXTRATO").Cells(nextRow, oCol) = .List(lista, lCount)   não foi possivel obter a propriedade list. Argumento inválido
    segunda-feira, 3 de março de 2014 18:10
  • O código que enviei está correto e fiz o teste antes, a sua adequação deve conter algo que impossibilita ela de rodar, então me envie a sua planilha pelo email ou no sendspace.com
    segunda-feira, 3 de março de 2014 19:27
  • Bruno , enviei para o seu e-mail
    segunda-feira, 3 de março de 2014 20:25