TRANSFERINDO DADOS DE UMA LISTBOX PARA UMA PLANILHA.pdf

1
01/11/13 EXCELMAIS: 01/06/11 - 01/07/11 excelmais.blogspot.com.br/2011_06_01_archive.html 1/1 TRANSFERINDO DADOS DE UM LISTBOX PARA UMA PLANILHA Por falta de muitos controles no VBA, o ListBox é quase uma unanimidade para fazer a apresentação dos dados de forma tabular. Ele funciona bem, permite adicionar múltiplas colunas, adicionar valores de cabeçalho, mudar o formato da seleção, enfim. O fato é que, códigos de exemplo para alimentar um listBox com os dados de uma planilha há de monte, mas o contrário nem tanto. Bom, atendendo a pedidos, coloco aqui uma alternativa de código que faz exatamente o trabalho de copiar os dados de um ListBox para uma planilha. O código está bem bacana, porém, muito amarrado a planilha que foi produzida, sendo totalmente dependente da sua implementação. Abaixo segue o código com algumas mudanças de tal forma que, possa ser facilmente adaptado para qualquer planilha: Sub Copiar_ListBox_Para_Planilha(ByVal NomePlanilhaDestino As String, ByRef listBoxControl As MSForms.ListBox) Dim iListCount As Integer, iColCount As Integer, iColListCount As Integer Dim iRow As Integer Dim linhaInicial As Integer Dim planilhaDestino As Worksheet Set planilhaDestino = ThisWorkbook.Worksheets(NomePlanilhaDestino) linhaInicial = planilhaDestino.Cells(65536, 2).End(xlUp).Row + 1 If listBoxControl.RowSource <> "" Then iColListCount = Range(listBoxControl.RowSource).Columns.Count Else iColListCount = listBoxControl.ColumnCount - 1 End If If listBoxControl.ColumnHeads Then iRow = 1 End If 'faz o loop para todos os itens do ListBox For iListCount = 0 To listBoxControl.ListCount - 1 If listBoxControl.Selected(iListCount) = True Then 'testa se o item está selecionado listBoxControl.Selected(iListCount) = False iRow = iRow + 1 'faz o loop pelas colunas For iColCount = 0 To iColListCount - 1 'copia os dados do controle para a planilha planilhaDestino.Cells(iRow, iColCount + 1).Value = listBoxControl.List(iListCount, iColCount) Next iColCount End If Next iListCount End Sub Para fazer a chamada a esse método na mesma planilha disponibilizada, bastaria colocar o seguinte código: Call Copiar_ListBox_Para_Planilha("Data Transfer Sheet", Me.ListBox1) Ou seja, ele permite você definir o nome da planilha para qual será copiado o conteúdo e qual o controle ListBox será a fonte dos dados. O código faz várias considerações, prevendo que seus dados sejam baseados em adição manual ou através de RowSource.

Transcript of TRANSFERINDO DADOS DE UMA LISTBOX PARA UMA PLANILHA.pdf

Page 1: TRANSFERINDO DADOS DE UMA LISTBOX PARA UMA PLANILHA.pdf

01/11/13 EXCELMAIS: 01/06/11 - 01/07/11

excelmais.blogspot.com.br/2011_06_01_archive.html 1/1

TRANSFERINDO DADOS DE UM LISTBOX PARA UMA PLANILHA

Por falta de muitos controles no VBA, o ListBox é quase uma unanimidade para fazer a apresentação dos dados de forma tabular. Ele funciona bem,

permite adicionar múltiplas colunas, adicionar valores de cabeçalho, mudar o formato da seleção, enfim.

O fato é que, códigos de exemplo para alimentar um listBox com os dados de uma planilha há de monte, mas o contrário nem tanto. Bom, atendendo

a pedidos, coloco aqui uma alternativa de código que faz exatamente o trabalho de copiar os dados de um ListBox para uma planilha.

O código está bem bacana, porém, muito amarrado a planilha que foi produzida, sendo totalmente dependente da sua implementação. Abaixo segue o

código com algumas mudanças de tal forma que, possa ser facilmente adaptado para qualquer planilha:

Sub Copiar_ListBox_Para_Planilha(ByVal NomePlanilhaDestino As String, ByRef listBoxControl As MSForms.ListBox)

Dim iListCount As Integer, iColCount As Integer, iColListCount As Integer

Dim iRow As Integer

Dim linhaInicial As Integer

Dim planilhaDestino As Worksheet Set planilhaDestino = ThisWorkbook.Worksheets(NomePlanilhaDestino)

linhaInicial = planilhaDestino.Cells(65536, 2).End(xlUp).Row + 1 If listBoxControl.RowSource <> "" Then

iColListCount = Range(listBoxControl.RowSource).Columns.Count

Else

iColListCount = listBoxControl.ColumnCount - 1

End If If listBoxControl.ColumnHeads Then

iRow = 1

End If 'faz o loop para todos os itens do ListBox

For iListCount = 0 To listBoxControl.ListCount - 1

If listBoxControl.Selected(iListCount) = True Then 'testa se o item está selecionado

listBoxControl.Selected(iListCount) = False

iRow = iRow + 1

'faz o loop pelas colunas

For iColCount = 0 To iColListCount - 1

'copia os dados do controle para a planilha

planilhaDestino.Cells(iRow, iColCount + 1).Value = listBoxControl.List(iListCount, iColCount)

Next iColCount

End If

Next iListCount End Sub

Para fazer a chamada a esse método na mesma planilha disponibilizada, bastaria colocar o seguinte código:

Call Copiar_ListBox_Para_Planilha("Data Transfer Sheet", Me.ListBox1)

Ou seja, ele permite você definir o nome da planilha para qual será copiado o conteúdo e qual o controle ListBox será a fonte dos dados. O código faz

várias considerações, prevendo que seus dados sejam baseados em adição manual ou através de RowSource.