Usuário com melhor resposta
Transferindo Dados entre listbox em formulário no excel VBA na horizontal

Pergunta
-
Boa tarde!
Estou terminando uma agenda eletrônica no VBA.
No formulário tenho 2 listbox
Listbox1 e listbox2 - comando salvar e botão adicionar .
O listbox 1 já está funcionando com a formula:
Private Sub ListBox1_Enter() ListBox1.ColumnCount = 10 ListBox1.RowSource = "Grupos!A1:A160" End Sub
o botão inserir está funcionando com a formula:
Private Sub CommandButton1_Click() Me.ListBox2.AddItem (Me.ListBox1.Value) End Sub
o comando salvar consigo salvar na vertical:
Private Sub CommandButton2_Click() Sheets("fornecedores").Select Range("L2").Select 'Range("L2").Resize(ListBox2.ListCount) = ListBox2.List End Sub
Estou precisando saber qual código posso usar para salvar na horizontal?
Por favor alguém me ajude.
Aguardo;
Flávia
Respostas
-
Vou dar um exemplo para você adaptar sua solução.
Crie um formulário com uma caixa de listagem chamada ListBox1 e um botão de comando chamado CommandButton1 e cole o código abaixo:
Dim mwks As Excel.Worksheet Private Sub CommandButton1_Click() Dim lngLast As Long Dim lngCol As Long lngLast = mwks.Cells(mwks.Rows.Count, "A").End(xlUp).Row + 1 With Me.ListBox1 For lngCol = 0 To .ColumnCount - 1 mwks.Cells(lngLast, "A").Offset(, lngCol) = .List(.ListIndex, lngCol) Next lngCol End With End Sub Private Sub UserForm_Initialize() Set mwks = ThisWorkbook.Worksheets("Plan1") Me.CommandButton1.Caption = "Inserir" With Me.ListBox1 .ColumnCount = 3 .AddItem .AddItem .AddItem .List(0, 0) = "Linha 1, Coluna 1" .List(0, 1) = "Linha 1, Coluna 2" .List(0, 2) = "Linha 1, Coluna 3" .List(1, 0) = "Linha 2, Coluna 1" .List(1, 1) = "Linha 2, Coluna 2" .List(1, 2) = "Linha 2, Coluna 3" .List(2, 0) = "Linha 3, Coluna 1" .List(2, 1) = "Linha 3, Coluna 2" .List(2, 2) = "Linha 3, Coluna 3" .ListIndex = 1 End With CommandButton1_Click End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 7 de junho de 2014 17:14
Todas as Respostas
-
Bem vinda ao fórum.
---
Ao inserir um código no fórum, utilize blocos de código. Para utilizar essa ferramenta, clique no botão cuja legenda é “Inserir bloco de código” na barra do editor de mensagens do fórum. Uma janela aparecerá onde você deverá colar seu código cru na caixa de texto à esquerda. Então, selecione a opção Vb.Net na caixa de combinação que você verá em cima à esquerda e depois clique no botão Inserir.
---
Sobre sua dúvida, não testei, mas experimente:
Worksheets("fornecedores").Range("L2").Resize(, Me.ListBox2.ListCount) = Me.ListBox2.List
ou:
Worksheets("fornecedores").Range("L2").Resize(, Me.ListBox2.ListCount) = WorksheetFunction.Transpose(Me.ListBox2.List)
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
O primeiro código deu certo porém:
minha listbox2 nunca tem só 1 item , sempre tem mais
E esse código salva ela só como 1 item. ( QUE É L2) quero que salva L2,M2,N2,O2........) uns 10 campos
E quando passo para outro cadastro ele salva só na linha L2 , quero que ele salva conforme for adicionando cadastro.
Quero que salva conforme vai cadastrando fornecedores L3,L4,L5 ...
Obrigado!
Aguardo;
Flávia
-
Ainda não entendi bem o que deseja fazer.
O código abaixo salva toda uma caixa de listagem numa planilha:
Dim wks As Excel.Worksheet Set wks = ThisWorkbook.Worksheets("Plan1") With Me.ListBox1 wks.Range("A1").Resize(.ListCount, .ColumnCount).Value = .List End With
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
-
Felipe
Consegui salvar em Horizontal os itens da listbox2.
Porém não salva todos os itens.
Salva só o 1ª item da listbox2 em todas colunas que configurei.
Segue abaixo o código que estou usando.
Private Sub CommandButton2_Click() Sheets("fornecedores").Select Range("L2").Select 'Range("L2").Resize(ListBox2.ListCount) = ListBox2.List Worksheets("fornecedores").Range("L2").Resize(, Me.ListBox2.ListCount) = Me.ListBox2.List Worksheets("fornecedores").Range("M2").Resize(, Me.ListBox2.ListCount) = Me.ListBox2.List Worksheets("fornecedores").Range("N2").Resize(, Me.ListBox2.ListCount) = Me.ListBox2.List Worksheets("fornecedores").Range("O2").Resize(, Me.ListBox2.ListCount) = Me.ListBox2.List Worksheets("fornecedores").Range("P2").Resize(, Me.ListBox2.ListCount) = Me.ListBox2.List Worksheets("fornecedores").Range("Q2").Resize(, Me.ListBox2.ListCount) = Me.ListBox2.List Worksheets("fornecedores").Range("R2").Resize(, Me.ListBox2.ListCount) = Me.ListBox2.List Worksheets("fornecedores").Range("S2").Resize(, Me.ListBox2.ListCount) = Me.ListBox2.List Worksheets("fornecedores").Range("T2").Resize(, Me.ListBox2.ListCount) = Me.ListBox2.List Worksheets("fornecedores").Range("U2").Resize(, Me.ListBox2.ListCount) = Me.ListBox2.List ActiveCell = ListBox2 ActiveCell.Offset(0, 1).Select End Sub
Aguardo;
Flávia Andrade
-
Bom, infelizmente não estou conseguindo entender o que quer fazer.
Você tem uma caixa de listagem com mais de uma coluna e mais de uma linha e o que quer fazer? Preencher os dados dessa linha numa planilha, e seus respectivos valores de cada coluna?
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
-
Vou dar um exemplo para você adaptar sua solução.
Crie um formulário com uma caixa de listagem chamada ListBox1 e um botão de comando chamado CommandButton1 e cole o código abaixo:
Dim mwks As Excel.Worksheet Private Sub CommandButton1_Click() Dim lngLast As Long Dim lngCol As Long lngLast = mwks.Cells(mwks.Rows.Count, "A").End(xlUp).Row + 1 With Me.ListBox1 For lngCol = 0 To .ColumnCount - 1 mwks.Cells(lngLast, "A").Offset(, lngCol) = .List(.ListIndex, lngCol) Next lngCol End With End Sub Private Sub UserForm_Initialize() Set mwks = ThisWorkbook.Worksheets("Plan1") Me.CommandButton1.Caption = "Inserir" With Me.ListBox1 .ColumnCount = 3 .AddItem .AddItem .AddItem .List(0, 0) = "Linha 1, Coluna 1" .List(0, 1) = "Linha 1, Coluna 2" .List(0, 2) = "Linha 1, Coluna 3" .List(1, 0) = "Linha 2, Coluna 1" .List(1, 1) = "Linha 2, Coluna 2" .List(1, 2) = "Linha 2, Coluna 3" .List(2, 0) = "Linha 3, Coluna 1" .List(2, 1) = "Linha 3, Coluna 2" .List(2, 2) = "Linha 3, Coluna 3" .ListIndex = 1 End With CommandButton1_Click End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator sábado, 7 de junho de 2014 17:14