Notifications
Clear all

combobox listando valores atualizados instataneamente

5 Posts
2 Usuários
0 Reactions
1,991 Visualizações
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

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.

 
Postado : 18/04/2014 12:05 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Eu tenho por mim que nada pode ser desconsiderado, não só em programação, mas em tudo, estamos sempre a aprender.
Mas acho que o ideal seria ter postado o modelo para poder analisar melhor as dicas.

[]s

 
Postado : 18/04/2014 7:39 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

Desculpe é que eu usei em minha própria planilha, "que por si só é um tanto quanto estranha"
eu tinha postado a duvida a respeito aqui no forum.
viewtopic.php?f=23&t=11337

como não consegui usar nada do que achei,
teve até um do mouse que atualiza a lista, mas dá uns resultados um tanto quanto estranhos quando se seleciona o item.
e pesquisando sobre combo box achei esses comandos
ListCount que informa quantos itens tem e
RemoveItem que remove item por item.
tive vários erros, na tentativa de implantar

Do While combobox.ListCount > 0 '<<<se lista for maior que 0 faça Loop
combobox.RemoveItem (0) '<<<remove primeiro item
Loop '<<< loop até listcount ser 0
"nunca tinha usado Do While para loop"

basicamente não precisa mais usar UserForm_Initialize()
então não muda muita coisa, continua-se a usar a linha de comando para se preencher a combo box que já se tem
coloca
Do While combobox.ListCount > 0:combobox.RemoveItem (0): Loop '<<no inicio
não se pode ter combobox.Clear
nem combobox.Value = "" soltos na macro.

mas vou tentar fazer uma planilha de demonstração, apesar de achar que não precisa, já que a mudança é ínfima
em ves de utilizar assim:

Private Sub UserForm_Initialize()  'preenche combo box com nomes das planilhas
     For Each Sheetos In Worksheets
        Combobox1.AddItem Sheetos.Name
    Next
End Sub

Esse de cima mesmo excluindo alguma planilha ou adicionando,
a lista fica igual até se reiniciar a userform "é como eu usava"
o de baixo atualiza a combo assim que se clica nela para listar

com valores na planilha o resultado é igual "não testei com valores adicionados ou excluídos por outro combo ou caixa de texto"

Se usa assim:

Private Sub combobox1_DropButtonClick()
Do While combobox1.ListCount > 0:combobox1.RemoveItem (0): Loop '<<<limpa lista combobox

     For Each Sheetos In Worksheets
        Combobox1.AddItem Sheetos.Name
    Next

End Sub


eu é q que preciso aprender mais, não consegui nenhum resultado positivo dos outros eventos, nem consegui entender para que servem.
"esse _Click() serve para que? não acontece nada"

 
Postado : 19/04/2014 3:32 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

bem tem um exemplo das combos com o codigo ,
ficando mais facil encadear as combo box
tentei colocar combo na planilha mas não sei usar aquilo então só tem no useform

tentei usar um filtro para os valores repetidos mas só funcionou com valores em texto .
se alguem puder adaptar as macros para uso de combo dentro da planilha eu agradeço .

ficou um monte de sujeiras "dos testes" nas macros .

 
Postado : 20/04/2014 7:29 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

.
Consegui melhorar o Filtro de repetidos "eu acho"

e adicionei a leitura de qualquer Pasta de trabalho aberta

adicionei tbm , esconder e mostrar as combos em cascata, e a opção de selecionar a Linha de Referencia.

Ainda tem coisa que tem que melhorar para poder ser usada em qualquer planilha.

Office 2010

 
Postado : 21/04/2014 6:30 am