Notifications
Clear all

Dúvida COMBOX

2 Posts
2 Usuários
0 Reactions
889 Visualizações
(@monrizzo)
Posts: 2
New Member
Topic starter
 

Bom dia pessoal, tudo bem?

Estou com um problema em uma planilha, em um arquivo tenho uma planilha com COMBOBOX, os dados de referência estão em outro arquivo. Quando a planilha com os dados de referência está fechada, as opções da COMBOBOX somem. Somente funciona com o arquivo aberto. Gostaria de saber se para funcionar perfeitamente os dados de referência necessitam estar no mesmo arquivo. Caso não seja necessário, como faço para resolver isso.

Desde já agradeço.

 
Postado : 09/05/2018 8:46 am
(@srobles)
Posts: 231
Estimable Member
 

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