Monrizzo,
Se você utiliza a propriedade RowSource para preencher o ComboBox, com certeza é isso que causa a perda de dados.
Para que isso não ocorra mais, adicione um novo módulo á pasta que possui o ComboBox, copie e cole o que deixo abaixo:
'Lista pública para armazenar os dados obtidos
Public listaCombo() As String
Sub popularComboBox()
'Variáveis para manipularmos os dados
Dim cboCombo As ComboBox
Dim linhaAtual, linhaFinal As Long
Dim pastaOrigem, pastaDestino As String
Dim planilhaOrigem, planilhaDestino As Worksheet
Dim contador As Long
'Desativamos a atualização de tela
Application.ScreenUpdating = False
'Zeramos a variável contador
contador = 0
'Definimos a pasta de destino( a que contém o ComboBox)
pastaDestino = ThisWorkbook.Name
'Definimos qual o ComboBox que iremos manipular
Set cboCombo = ThisWorkbook.Sheets("Plan1").ComboBox1
'Abrimos a pasta que possui os dados
Workbooks.Open ("INFORME O CAMINHO COMPLETO DA PASTA DE TRABALHO")
'Definimos a pasta de origem dos dados(que é a que acabamos de abrir)
pastaOrigem = ActiveWorkbook.Name
'Definimos as planilhas de origem e destino
Set planilhaOrigem = Workbooks(pastaOrigem).Sheets("Plan1")
Set planilhaDestino = Workbooks(pastaDestino).Sheets("Plan1")
'Com a planilha que possui os dados
With planilhaOrigem
'Ativamos ela
.Activate
'Definimos as linhas Inicial e a Final
linhaAtual = 2
linhaFinal = .Cells(Rows.Count, 1).End(xlUp).Row
'Redimensionamos nossa lista de dados
ReDim listaCombo(linhaFinal)
'Enquanto a linha atual for menor ou igual que a final
While linhaAtual <= linhaFinal
'E se a mesma na coluna A possuir dados (troque 1 para a coluna que desejar)
If .Cells(linhaAtual, 1) <> "" Then
'Adicionamos o valor desta celula na coluna A
'á nossa lista
listaCombo(contador) = .Cells(linhaAtual, 1) 'troque 1 para a coluna que desejar
'Incrementamos o nosso contador
contador = contador + 1
'Redimensionamos a lista, preservando a ordem dos dados
ReDim Preserve listaCombo(contador)
End If
'Passamos para a próxima linha
linhaAtual = linhaAtual + 1
Wend
End With
'Ao final, fechamos a pasta que possui os dados
Workbooks(pastaOrigem).Close False
'E no nosso ComboBox
With cboCombo
'Limpamos ele
.Clear
'E para cada item da lista
For vItem = 0 To contador
'Se o item atual(vItem) for diferente de nulo
If listaCombo(vItem) <> "" Then
'Adicionamos o valor deste item ao ComboBox
.AddItem listaCombo(vItem)
End If
Next
End With
'Ao final, habilitamos a atualização de tela
Application.ScreenUpdating = True
End Sub
Adapte conforme sua necessidade. Atente-se aos nomes contidos na rotina, para garantir que está apontando para as pastas, planilhas e controles corretos. Assim, creio que não enfrentará problemas.
Espero ter ajudado.
Abs
Espero ter ajudado.
Abs.
Saulo Robles
Postado : 19/05/2018 11:56 pm