Notifications
Clear all

Excluir valor de listbox conforme condição

8 Posts
1 Usuários
0 Reactions
2,739 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite,

Tô tentando fazer um loop num listbox e excluir a linha, sempre que a condição for atendida, porém não tô conseguindo e não consegui entender onde estou errando. Alguém poderia me ajudar ?

Sub EXCLUIR()
Dim I As Double
I = 2

Do While ListBox1.List(I, 1) <> ""

If ListBox1.List(I, 4) = FCA.txtVER Then

ListBox1.RemoveItem Index
End If
I = I + 1
Loop
End sub

Abraço

 
Postado : 30/09/2011 8:26 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Guima, só pelo que postou fica um pouco complicado acertar na primeira :

Primeiro, porque não informou qual erro está dando.

O que temos em FCA.txtVER, é numerico, Texto ou outro ?

Na variavel :
Dim I As Double
I = 2 e depois na linha :
ListBox1.List(I, 4), indica que iniciamos a pesquisa na Linha 2 - Coluna 3 do ListBox, o correto não seria iniciar na primeira Linha ?, ou seja : I=0

Então, supondo que o Valor em txtVER é Numérico, sugiro a seguinte rotina :

Sub EXCLUIR()

    Dim I As Double
    
    I = 0
    
    Do While ListBox1.List(I, 1) <> ""
    
        If ListBox1.List(I, 4) = FCA.txtVER Then
            ListBox1.ListIndex = I 'Seleciona o Item
            
            'Remove do ListBox e da Aba
            Sheets("Sheet1").Rows(ListBox1.ListIndex + 2).Delete Shift:=xlUp
        End If
        
        I = I + 1
    
    Loop
 
 End Sub

Observe que na linha : Sheets("Sheet1").Rows(ListBox1.ListIndex + 2).Delete Shift:=xlUp, irá Remover o Item do ListBox e da Aba, se não deletar na aba irá gerar um erro, pelo fator de carregamento dos dados no ListBox quando o form é iniciado, precisamos refazer o rowsource.

Espero que as informações ajudem, se não tiver sucesso, forneça mais detalhes.

[]s

 
Postado : 30/09/2011 10:00 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa madrugada Mauro !!

Quanto tempo, bom revê-lo.

Vou respondendo seus questionamentos:

O que temos em FCA.txtVER, é numerico, Texto ou outro ?

Sim, é valor númerico

Na variavel :
Dim I As Double
I = 2 e depois na linha :
ListBox1.List(I, 4), indica que iniciamos a pesquisa na Linha 2 - Coluna 3 do ListBox, o correto não seria iniciar na primeira Linha ?, ou seja : I=0

Novamente correto, vacilo meu. CTRL C + CTRL V e não alterei.

Observe que na linha : Sheets("Sheet1").Rows(ListBox1.ListIndex + 2).Delete Shift:=xlUp, irá Remover o Item do ListBox e da Aba, se não deletar na aba irá gerar um erro, pelo fator de carregamento dos dados no ListBox quando o form é iniciado, precisamos refazer o rowsource.

Acho que ai mora o problema, não há ligação com planilha, a relação seria somente com os valores dentro do Listbox, não existem os mesmos em nenhuma planilha.

na tentativa de adaptar a minha necessidade coloquei assim:

Dim I As Double
   I = 0
   
   Do While ListBox1.List(I, 1) <> ""
    
    If ListBox1.List(I, 4) = FCA.txtVER Then
    
   ListBox1.ListIndex = I 'Seleciona o Item
            
            'Remove do ListBox e da Aba
            ListBox1.ListIndex.Delete Shift:=xlUp
    End If
   I = I + 1
   Loop

Porém ocorreu o erro 424, dizendo que o objeto é obrigatório. Não entendi qual objeto, pois estão todos presentes.

Abraço e muito obrigado

 
Postado : 30/09/2011 10:38 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

EM TEMPO.

não consegui editar a mensagem anterior. Então o double post, desculpem.

A intenção seria deletar toda a linha do Listbox e não apenas o item encontrado.

 
Postado : 01/10/2011 11:12 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia

Consegui de certa forma um resultado satisfatório em partes. Exceto por um motivo, se o valor estiver na última linha do Listbox tudo que estiver antes dele é apagado. A rotina que usei ficou assim:

Sub EXCLUIR()
Dim I As Variant

   I = 0
   
   For I = ListBox1.ListCount - 1 To 0 Step -1
      
    If ListBox1.List(I, 4) = FCA.txtVER Then
       
   ListBox1.ListIndex = I 'Seleciona o Item
            
            'Remove do ListBox e da Aba
            ListBox1.RemoveItem ListIndex
    End If
  
   Next I

 
End Sub
 
Postado : 02/10/2011 9:33 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Guima, desculpe pela demora, eu estava justamente montando um exemplo basico para enviar:

Não tenho como me basear pela sua rotina por não ter o seu modelo, mas acredito que neste anexo de para elucidar as idéias.
Os códigos estão comentados, principalmente na questão referentes ao Do While e o ListCount.

Estou indo almoçar, de uma olhada, e qualquer duvida retorne, que mais tarde eu vejo.

[]s

 
Postado : 02/10/2011 9:44 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Guima, em sua rotina, é preciso ajustar o ListIndex, substituimos a instrução de selecionar a Linha definindo o ListIndex (ou seja armazenando com variave) e depois utilizamos na instrução de Remover entre parenteses, ficnado assim :

    Sub EXCLUIR()
    Dim I As Variant

    I = 0
       
        For I = ListBox1.ListCount - 1 To 0 Step -1
             
            If ListBox1.List(I, 4) = FCA.txtVER Then
                    
                 'Troque esta linha
                 ' ListBox1.ListIndex = I 'Seleciona o Item
                 'Por esta
                 ListIndex = I 'Define o ListIndex
                
                'E coloque ListIndex entre ()
                'Remove do ListBox e da Aba
                ListBox1.RemoveItem (ListIndex)
            End If
     
       Next I

    End Sub

[]s

 
Postado : 02/10/2011 10:26 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite Mauro,

Não se preocupe com a demora, meu caro. Foi até bom, pois tive tempo de quebrar q cabeça bastante e aprender um pouco mais sobre as propriedades do Listbox.

Mais ainda com sua aula agora. Agora funcionou perfeitamente, muito obrigado por mais essa ! :)

 
Postado : 03/10/2011 4:01 pm