Notifications
Clear all

Combobox atualizar automatico

12 Posts
4 Usuários
0 Reactions
2,795 Visualizações
(@miguexcel)
Posts: 167
Reputable Member
Topic starter
 

Boa tarde,

Tenho uma coluna com informação de nomes. O que quero é fazer uma combobox com essa informação, mas tenho várias vezes na coluna o mesmo nome, por ex:

Coluna A
Miguel
Miguel
João
Miguel

Quando faço combobox, apenas quero que Miguel apareça uma vez. Existe forma de fazer isso sem formulas no meu excel? Através de macro?

Me ajudem pf
Obrigado

 
Postado : 21/01/2014 11:23 am
(@bilokas)
Posts: 168
Reputable Member
 

Substitua o nome do ComboBox1, pelo nome do seu ComboBox e veja se te atende:

Coloque isso no início do formulário

Option Explicit

Coloque isso no evento Initialize

Private Sub UserForm_Initialize()
Dim OCOLLECTION As New Collection
Dim VARVALUE As Variant
Dim I As Long
On Error Resume Next
For Each VARVALUE In Plan1.Range("A2:A" & Plan1.Range("A65536").End(xlUp).Row)
        OCOLLECTION.Add VARVALUE, VARVALUE
Next
For I = 1 To OCOLLECTION.Count
        ComboBox1.AddItem OCOLLECTION.Item(I)
Next I
End Sub

Coloque isso no evento Exit do Combobox

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim I As Long
For I = 2 To Plan1.Range("A65536").End(xlUp).Row
        If ComboBox1.Value = Plan1.Range("A" & I).Value Then
        End If
Next I
End Sub
 
Postado : 21/01/2014 11:43 am
(@basole)
Posts: 487
Reputable Member
 

Tem tbem esta opção de combobox na planilha:

Supondo que seus dados esteja na conulna "A" e a coluna "L" vazia.

Private Sub ComboBox1_Change()
 'The Excel workbook and worksheets that contain the data, as well as the range placed on that data
    Dim wbBook As Workbook
    Dim wsSheet As Worksheet
    Dim rnData As Range

    'Variant to contain the data to be placed in the combo box.
    Dim vaData As Variant

    'Initialize the Excel objects
    Set wbBook = ThisWorkbook
    Set wsSheet = wbBook.Worksheets("plan1")

    'Set the range equal to the data, and then (temporarily) copy the unique values of that data to the L column.
    With wsSheet
        Set rnData = .Range(.Range("A1"), .Range("A100").End(xlUp))
        rnData.AdvancedFilter Action:=xlFilterCopy, _
                          CopyToRange:=.Range("L1"), _
                          Unique:=True
        'store the unique values in vaData
        vaData = .Range(.Range("L2"), .Range("L100").End(xlUp)).Value
        'clean up the contents of the temporary data storage
        .Range(.Range("L1"), .Range("L100").End(xlUp)).ClearContents
    End With

    'display the unique values in vaData in the combo box already in existence on the worksheet.
    With wsSheet.OLEObjects("ComboBox1").Object
        .Clear
        .List = vaData
        .ListIndex = -1
    End With

End Sub

fonte: http://msdn.microsoft.com/en-us/library ... 08925.aspx

 
Postado : 21/01/2014 11:47 am
(@miguexcel)
Posts: 167
Reputable Member
Topic starter
 

Eu não tenho formulario não. Minha combobox está inserida numa celula

 
Postado : 21/01/2014 11:49 am
(@basole)
Posts: 487
Reputable Member
 

Miguexcel,

copie o codigo que postei (que é para combobox na planilha), e cole no editor de vba da sua respectiva planilha e altere no codigo o nome ou numero do seu combobox e da sua planilha.

 
Postado : 21/01/2014 11:54 am
(@miguexcel)
Posts: 167
Reputable Member
Topic starter
 

Mas não entendo como faço combobox na celula. Desse jeito, tenho de ir buscar combobox Activex.

 
Postado : 21/01/2014 12:02 pm
(@bilokas)
Posts: 168
Reputable Member
 

O que você está chamando de "combobox na celula" na realidade é um Filtro, correto?

 
Postado : 21/01/2014 12:28 pm
(@miguexcel)
Posts: 167
Reputable Member
Topic starter
 

Segue um exemplo. O que pretendo é que os nomes não me apareçam repetidos

 
Postado : 21/01/2014 12:31 pm
(@depoisteconto)
Posts: 183
Reputable Member
 

Mas não entendo como faço combobox na celula. Desse jeito, tenho de ir buscar combobox Activex.

Miguel,

Se você está trabalhando diretamente na planilha então pode fazer assim:

1º - Para obter apenas nomes exclusivos, ou seja, sem repetição, vá na guia Dados, Classifica e Filtrar, opção Avançado. Marque a opção Copiar para outro local, selecione o Intervalo da Lista e Intervalo de Critérios (serão os mesmos), Copiar para (informe outro coluna para receber os dados) e por fim, marque Somente registros exclusivos.

2º - Com a lista exclusiva pronta, você pode popular o ComboBox Controle Activex e informando o range na propriedade ListFillRange;

Acho que é isso.

At

 
Postado : 21/01/2014 1:10 pm
(@miguexcel)
Posts: 167
Reputable Member
Topic starter
 

Mas meu problema é que esta lisat é constantemente atualizada. Não queria ter de fazer esses passos sempre que acrescento nomes

 
Postado : 21/01/2014 1:30 pm
(@basole)
Posts: 487
Reputable Member
 

Miguexcel,

Pelo pouco que sei, o que voce quer fazer, somente com macro. Veja o exemplo usando sua planilha, com ComboBox Activex, e uilizando o codigo que postei acima.

 
Postado : 21/01/2014 4:40 pm
(@depoisteconto)
Posts: 183
Reputable Member
 

Parece que estamos falando de range dinâmico.

Veja viewtopic.php?f=20&t=98. O user deu uma senhora explicação.

Então se você criar o range dinâmico poderá atribuir esse intervalo nos controle combobox activex ou pela validação de dados.

Se for no combobox atribua o nome do intervalo na propriedade listfillrange, se for na validação de dados escolha como critério Lista e coloque na fonte = nome_do_intervalo.

At

 
Postado : 21/01/2014 5:56 pm