none
Transferindo Dados entre listbox em formulário no excel VBA na horizontal RRS feed

  • 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

    quinta-feira, 30 de janeiro de 2014 16:45

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

    terça-feira, 4 de fevereiro de 2014 22:49
    Moderador

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

    quinta-feira, 30 de janeiro de 2014 22:14
    Moderador
  •  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

    sexta-feira, 31 de janeiro de 2014 16:55
  • 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

    sábado, 1 de fevereiro de 2014 16:43
    Moderador
  • Bom dia Felipe!

    Esse código me ajudou.

    Porém preciso que ele salve a lista em horizontal.

    Ele está salvando em vertical na planilha.

    Valeu!

    Flávia

    segunda-feira, 3 de fevereiro de 2014 09:56
  • 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

    segunda-feira, 3 de fevereiro de 2014 11:41
  • 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

    segunda-feira, 3 de fevereiro de 2014 22:25
    Moderador
  • Minha listbox2 são vários itens.

    Gostaria de cada item da listbox2 fosse para cada coluna da planilha.

    Tem como me enviar seu email. Para que posso te enviar a planilha ou a imagem dela.

    Aguardo;

    Flávia

    terça-feira, 4 de fevereiro de 2014 10:45
  • 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

    terça-feira, 4 de fevereiro de 2014 22:49
    Moderador