Notifications
Clear all

"Unselect" não funciona na ListBox

12 Posts
4 Usuários
0 Reactions
2,565 Visualizações
(@jokaman)
Posts: 44
Eminent Member
Topic starter
 

Boa tarde

Mais uma vez pedindo ajuda com um código em VBA.

Tenho uma planilha que para um determinado empreendimento tenho que fazer a afetação de meios.
Para tal tenho uma UserForm "FTEForm" aonde classifico cada empreendimento e no final fruto dessa classificação tenho uma afetação de DF e FO.

A FTEform é esta:

Assim depois de escolher o empreendimento e escolher a "Tipificação" vou escolher uma "Afetações Primárias" e depois os respetivos "Fatores de Correções - Ki's", e aqui é que começa o meu problema, que passo a explicar:
1) Eu só posso escolher os Ki's depois de ter escolhido em primeiro lugar as "Afetações Primárias";
2) Quando eu escolho em primeiro lugar os Ki's aparece-me uma mensagem a dizer "É necessário definir primeiro as afetações primárias" e faço o unselect (Select(i)= False) na respetiva Listbox;
3) O problema é que ele faz o unselect mas o item na listBox continua "selecionado" ou seja continua azul; Como faço para que o item deixe de ficar azul?
4) Não sei porque razão a mensagem que refiro em cima aparece sempre duas vezes, ou seja a subrotina é chamada duas vezes. Como resolvo este problema?

Obrigado
Jorge Cabral

NOTA: Eu sei que poderia resolver este problema de outra maneira nomeadamente colocando todas as ListBox como "Enable=False" e só as ir libertando depois de preencher as anteriores, mas de momento não pretendo implementar essa solução até porque precisava de resolver este problema para outra situação que tenho.

Também aqui: http://www.tomasvasquez.com.br/forum/vi ... =20&t=5361

 
Postado : 26/04/2017 6:50 am
Basole
(@basole)
Posts: 487
Reputable Member
 

Amigo, minha sugestão seria limpar todos os dados do listbox, após chamar a rotina "Calc_Afetacoes", em seguida carregar novamente;

Tomando como exemplo o seu listbox "lstDeslocacao", segue o codigo:

Sub lstDeslocacao_Click()
     
    Call Calc_Afetacoes
     
    With lstDeslocacao 'K1 - Deslocação
        .clear
        .AddItem "D<100km"
        .AddItem "100km<D<200km"
        .AddItem "D>200km"
    End With
     
End Sub

Veja se lhe atende.

Click em se a resposta foi util!

 
Postado : 26/04/2017 7:51 am
(@jokaman)
Posts: 44
Eminent Member
Topic starter
 

Boa tarde Basole

Muito obrigado pela sua resposta.

A sua solução funciona com algumas adaptações que tive que fazer para a planilha original.

Contudo continuo sem perceber porque razão o código da Sub Unselect_lstDesloc() não funciona, sendo que acho que é um código mais "Clean" que o seu, será alguma limitação do VBA?

O seu código ao contrário do meu, funciona, mas acho que é apenas uma maneira boa de contornar o problema gostava de saber porque razão o meu código não funciona.
Vou ver se aparece mais alguma ideia, mas para já vou implementar a sua solução.

Obrigado
Jorge Cabral

 
Postado : 26/04/2017 9:33 am
Basole
(@basole)
Posts: 487
Reputable Member
 

Boa tarde Jokaman,

Sim é uma soluçao paliativa, mas resolve o seu problema, como disse.
Eu ja tive este problema e tentei varias formas de sugestoes encontradas na net, mas nenhuma resolveu.
Esta funcao unselect que voce esta usando, ate funciona, torna a seleção como falsa, mas o listbox ainda continua com o item azul (como voce mesmo disse)
Diferentemente do combobox que sao controles similares, com a propriedade .ListIndex =-1 voce consegue deixa-lo sem seleçao de item. Mas Com o ListBox nao. Ate mesmo se voce usar o SetFocus em outro controle, isso ainda continua.
Mas enfim talvez alguem tenha uma resposta para isso.

Click em se a resposta foi util!

 
Postado : 26/04/2017 10:13 am
(@jokaman)
Posts: 44
Eminent Member
Topic starter
 

Basole

Você explicou tudo direitinho, o meu problema é mesmo esse.
E como você diz vamos ver se alguém tem outra solução, porque já testei todas as que encontrei na net e nenhuma "apaga" a seleção azul.

Muito obrigado mais uma vez

Jorge Cabral

 
Postado : 26/04/2017 10:38 am
Syrax
(@syrax)
Posts: 160
Estimable Member
 

Jokaman

Veja se isso te ajuda

ListBox1.ListIndex = -1 'onde listbox1 é o nome da sua listbox

se listindex indica qual linha deve ser seleciona da listbox, se você indicar um valor que não existe, então ele não seleciona nenhum valor

Se essa resposta te ajudou e resolveu o seu problema, clique no "joinha" ao lado de citar, e não esqueça de colocar o tópico como resolvido, clicando no ✓

 
Postado : 26/04/2017 12:02 pm
(@jokaman)
Posts: 44
Eminent Member
Topic starter
 

Obrigado Syrax pela sua dica, mas infelizmente não funciona, o item continua selecionado a azul

 
Postado : 26/04/2017 3:31 pm
Syrax
(@syrax)
Posts: 160
Estimable Member
 

Jokaman

Fiz o teste aqui e funcionou, ele tirou a seleção em azul do item selecionado

Se essa resposta te ajudou e resolveu o seu problema, clique no "joinha" ao lado de citar, e não esqueça de colocar o tópico como resolvido, clicando no ✓

 
Postado : 26/04/2017 6:26 pm
(@jokaman)
Posts: 44
Eminent Member
Topic starter
 

Syrax, dá para implementar essa sua solução na planilha que disponibilizei e colocar aqui?

Eu tentei mas não consegui, mas percebo muito, muito, muito, ...., pouco de VBA.

Obrigado
Jorge Cabral

 
Postado : 27/04/2017 7:53 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Jokaman, a dica do Basole é boa e a instrução que o Syrax passou funciona, só que tem um porem, você tem vários Llistbox dispostos dentro de Frames e com isto cada controle é independente, ou seja após a msg para selecionar um valor no outro Listbox você não está saindo dele, para funcionar o SetFocus tem de referenciar os controles por completo Form.Frame.Listbox.

Mas uma sugestão, que costumo utilizar para evitar desconfortos tipo este é deixando os Listbox com a Propriedade - Enabled=False, e nos Eventos Click definir o Enabled para True, desta forma não tem como selecionar o próximo listbox, que só será habilitado após a seleção do anterior.

Por exemplo, faça o teste trocando a rotina do Listbox "lstAFTPDF" pela a abaixo e vá em propriedades do "lstDeslocacao" e altere Enabled para False, veja que só acrescentei a instrução para habilitar a seleção do lstDeslocacao :

Sub lstAFTPDF_Click()
    Call Calc_Afetacoes
    lstDeslocacao.Enabled = True
End Sub

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/04/2017 7:10 pm
(@jokaman)
Posts: 44
Eminent Member
Topic starter
 

Boa tarde Mauro

Tentei a sua primeira sugestão e não funcionou, posso estar a fazer algo de errado, dá para implementar diretamente na planilha que disponibilizei e colocar aqui.

Sub Unselect_lstDesloc()
       For i = 0 To FTEform.MultiPage1.Page2.Frame1.Frame3.lstDeslocacao.ListCount - 1
            FTEform.MultiPage1.Page2.Frame1.Frame3.lstDeslocacao.Selected(i) = False
        Next i
End Sub

A segunda sugestão é como falei, não queria implementar, gostaria de resolver este problema primeiro.

Obrigado
Jorge Cabral

 
Postado : 28/04/2017 11:11 am
(@jokaman)
Posts: 44
Eminent Member
Topic starter
 

Alguma sugestão?

Jorge Cabral

 
Postado : 10/05/2017 7:38 am