Usuário com melhor resposta
Enviar dados da listbox para planilha - Excel VBA

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!
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
-
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 SubAté
Alberto
- Marcado como Resposta Everton_Delmiro quinta-feira, 6 de março de 2014 16:26
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!
-
-
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
-
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 SubAté
Alberto
- Marcado como Resposta Everton_Delmiro quinta-feira, 6 de março de 2014 16:26
-
-
-
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
- Editado Everton_Delmiro segunda-feira, 3 de março de 2014 18:13
-
-