Bem, como eu precisei e pelo que achei na internet usam maneira mais complicada do que a que eu consegui.
Caso seja algo trivial e simples em que eu fui o único a não conseguir facilmente podem apagar.
os que eu achei só atualizam a combobox na hora que se abre o formulário,
ou utilizam artifícios complicados "pelo menos para mim",
ou usam mais de uma macro.
com DropButtonClick se atualiza instantaneamente assim que se clica nele e com uma única macro
mas tem o inconveniente de popular varias vezes a cada vez que se clica nele.
usando combobox.Clear antes de carregar a lista não dá para selecionar os valores carregados
combobox.Value = "" gera o mesmo incoveniente
bem, esses inconvenientes podem ser aproveitados
Mas então como ter uma combobox com atualização instantânea com apenas uma macro e sem o inconveniente de ter as coisas listadas varias vezes.
Do While combobox.ListCount > 0:combobox.RemoveItem (0): Loop '<<<limpa lista combobox
Então basicamente a macro da combobox ficaria:
Private Sub combobox1_DropButtonClick()
Do While combobox1.ListCount > 0:combobox1.RemoveItem (0): Loop '<<<limpa lista combobox
...Codigo de preenchimento ...
End Sub
um exemplo com os que usei no meu formulario:
preenche a combobox Plan_list com os nomes das planilhas
Private Sub Plan_list_DropButtonClick()
Do While Plan_list.ListCount > 0: Plan_list.RemoveItem (0): Loop ' <<<limpa a combox
Plan_list.AddItem "" '<<<<adiciona um item vazio
For Each Sheetos In Worksheets
Plan_list.AddItem Sheetos.Name '<<<<preenche a lista com os nomes da ABAS
Next
De_1.Value = "" "<<<limpa valor listado na combobox De_1
End Sub
varre a planilha listada em PLan_List , apresenta os valores atualizados
Private Sub De_1_DropButtonClick()
Dim pldd As String, cole As Byte, pl_L As String
cole = 0: Limit
Do While De_1.ListCount > 0: De_1.RemoveItem (0): Loop ' <<<limpa a combox
If Plan_list = "" Then pl_L = Plan_Aq Else pl_L = Plan_list '<<<<se a combox Plan_list for vazia
Do Until Sheets(pl_L).Cells(SetPosL, SetPosC + cole) = "auxb" Or cole = 20 '<<varre a planilha listada por combox Plan_list
pldd = Sheets(pl_L).Cells(SetPosL, SetPosC + cole).Value
If pldd <> "" Or pldd <> "auxa" Then
De_1.AddItem pldd
End If
cole = cole + 1
Loop
If pldd <> "auxa" Then '<<<----<aproveita as inconveniências do clear
De_1.Clear '<<<----<aproveita as inconveniências do clear
De_1.AddItem "Sem setores"
De_1.Value = "" '<<<----<lista o valor mas nao deixa selecionar
End If
End Sub
e na macro que usa o valor da combox
If De_1 = "" Then MsgBox "Favor inserir o setor de origem": GoTo Saida
Sei que ficou meio confuso, se não for de proveito podem apagar
se for de interesse coletivo seria melhor alguém editar para ficar mais compreensivo.
Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.
"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"
Postado : 18/04/2014 12:05 pm