none
Eliminar (Remover) Item da ComboBox RRS feed

  • Pergunta

  • Mais uma vez peço a ajuda dos mestres do VBA para resolver meu problema.

    Tenho uma planilha onde na coluna A se encontram vários itens. Os itens vão de A2:A241. Só que minhas células estão mescladas, tipo A2 com A3; A4 com A5; e assim consecutivamente.

    E eis meu grande problema. Fiz um userform que quando inicia ele faz  um RowSource da coluna A para fazer a lista no combobox. Até ae tudo certo, ele inicia e me carrega todos os itens que tem na planilha, porém, como existe mescla ele aparece entre os itens um espaço vazio e acredito que esse item vazio se refere sempre ao par da mescla que está realmente vazio.

    Como faço para excluir estes itens vazios da lista do combobox?

    Agradeço a ajuda desde já.

    segunda-feira, 7 de dezembro de 2015 13:34

Respostas

  • Segue o código comentado, ele percorre a coluna A e ignora células vazias, como por exemplo as que estão mescladas:

    Sub carregaCombo()
    
    'declaração de variáveis
    Dim lngLastRow As Long
    
    'Seleciona a guia da planilha
    Sheets("Plan1").Select
    
    'descobre o número da linha da última celula preenchida
    lngLastRow = Sheets("Plan1").Range("A1").SpecialCells(xlLastCell).Row
    
    'laço de repetição que percorre os dados da coluna
    For i = 1 To lngLastRow
        
        'se o valor for diferente de vazio
        If Cells(i, 1).Value <> "" Then
            
            'adiciona o item na combobox
            UserForm1.ComboBox1.AddItem Cells(i, 1).Value
        
        End If
    
    'próxima repetição
    Next i
    
    End Sub


    • Editado André Santo segunda-feira, 7 de dezembro de 2015 16:00
    • Marcado como Resposta Diego.Tj segunda-feira, 7 de dezembro de 2015 17:33
    segunda-feira, 7 de dezembro de 2015 15:58

Todas as Respostas

  • Diego,

    Você pode iterar sobre os elementos do combo box e remover os que estão com Text vazio:

    Dim intComboItem As Integer
        
    For intComboItem = 0 To Me.ComboBox1.ListCount - 1
        if StrComp (Me.ComboBox1.Value, "") == 0 then
           Me.ComboBox1.RemoveItem intComboItem
        end if
    Next


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    segunda-feira, 7 de dezembro de 2015 13:43
  • Outra abordagem possível seria preencher o combo utilizando o método additem ao invés de Rowsource e verificando o valor da célula antes de inserir

    segunda-feira, 7 de dezembro de 2015 15:12
  • Oi André, obrigado pelas linhas de código, mas agora está me aparecendo o seguinte erro:

    _______________________________________________

    Erro em tempo de execução '-2147467259 (80004005)':

    Erro não especificado.

    _______________________________________________

    Na hora que debuguei o código vi que ele passa no primeiro item, porém quando aparece o item vazio (que é o item 1 do combobox) e ele passa pra linha de remover, dá este erro.

    Alguma solução?


    • Editado Diego.Tj segunda-feira, 7 de dezembro de 2015 15:42
    segunda-feira, 7 de dezembro de 2015 15:40
  • Outra abordagem possível seria preencher o combo utilizando o método additem ao invés de Rowsource e verificando o valor da célula antes de inserir

    E como eu faria isso? Não sei usar a função additem ainda. Usaria Range mais additem e colocaria uma condição para não pegar as células vazias?

    Só a critério de reforço as células que aparecem vazias são as mescladas com as que tem os items para aparecer na lista do combobox.


    • Editado Diego.Tj segunda-feira, 7 de dezembro de 2015 15:53
    segunda-feira, 7 de dezembro de 2015 15:52
  • Segue o código comentado, ele percorre a coluna A e ignora células vazias, como por exemplo as que estão mescladas:

    Sub carregaCombo()
    
    'declaração de variáveis
    Dim lngLastRow As Long
    
    'Seleciona a guia da planilha
    Sheets("Plan1").Select
    
    'descobre o número da linha da última celula preenchida
    lngLastRow = Sheets("Plan1").Range("A1").SpecialCells(xlLastCell).Row
    
    'laço de repetição que percorre os dados da coluna
    For i = 1 To lngLastRow
        
        'se o valor for diferente de vazio
        If Cells(i, 1).Value <> "" Then
            
            'adiciona o item na combobox
            UserForm1.ComboBox1.AddItem Cells(i, 1).Value
        
        End If
    
    'próxima repetição
    Next i
    
    End Sub


    • Editado André Santo segunda-feira, 7 de dezembro de 2015 16:00
    • Marcado como Resposta Diego.Tj segunda-feira, 7 de dezembro de 2015 17:33
    segunda-feira, 7 de dezembro de 2015 15:58
  • Provavelmente deve ter alguma maneira de fazer isso utilizando SpecialCells também, estou estudando aqui e retorno na sequência..

    Mas ambos os códigos acima vão atender sua necessidade.

    segunda-feira, 7 de dezembro de 2015 16:09