Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

ERRO - ComboBox não está alimentando

Olá, tranquilos? Seguinte, tentei montar um combobox para ser alimentado dinamicamente. Ele puxou as informações da DataBase, porém na hora em que adcionei um item novo, não entrou na lista do combobox. Fiz exatamente como na aula.

SCRIPT da aula:

Private Sub cmdFiltrar_Click()

    Sheets("Base Filtrada").Select

    Range("A2:M2").Select
    Selection.ClearContents

    Range("A2") = Trim(txtNomeCliente)
    Range("D2") = Trim(txtValorContrato)
    Range("F2") = Trim(txtPeso)
    Range("G2") = Trim(cmbTipoVeiculo)

    FiltrarBase
    Sheets("Dashboard").Select
End Sub
Private Sub UserForm_Activate()
    Dim iContador As Integer

    iContador = 2

    cmbTipoVeiculo.AddItem ""

    Do While Sheets("Controle de Entregas").Range("G" & iContador) <> vbNullString
        If Not fnVerificaVeiculoNaLista(Sheets("Controle de Entregas").Range("G" & iContador)) Then
            cmbTipoVeiculo.AddItem Sheets("Controle de Entregas").Range("G" & iContador)
        End If

        iContador = iContador + 1
    Loop
End Sub
Function fnVerificaVeiculoNaLista(pTipoDeVeiculo As String) As Boolean

    Dim iContador As Integer

    fnVerificaVeiculoNaLista = False

    If cmbTipoVeiculo.ListCount <> 0 Then

        For iContador = 0 To cmbTipoVeiculo.ListCount - 1
            If cmbTipoVeiculo.List(iContador) = pTipoDeVeiculo Then
                fnVerificaVeiculoNaLista = True
            End If
        Next

    End If


End Function

Meu SCRIPT

Private Sub cmdFiltrar_Click()

Sheets("BASE_FILTRADA").Select

Range("A2:M2").Select
Selection.ClearContents

Range("D2") = Trim(txtFavorecido)
Range("E2") = Trim(txtCliente)
Range("F2") = Trim(cmbCategoria)
Range("G2") = Trim(cmbSubCategoria)

FiltrarBaseFinanceiro
Sheets("DASHBOARD").Select


End Sub

Private Sub UserForm_Activate()

    Dim iContador As Integer

    iContador = 2

    cmbSubCategoria.AddItem ""


    Do While Sheets("DB_FINANCEIRO").Range("G" & iContador) <> vbNullString
    If Not fnVerificaSubCategoriaNaLista(Sheets("DB_FINANCEIRO").Range("G" & iContador)) Then
        cmbSubCategoria.AddItem Sheets("DB_FINANCEIRO").Range("G" & iContador)
    End If

       iContador = iContador + 1
    Loop
End Sub
Function fnVerificaSubCategoriaNaLista(pSubCategoria As String) As Boolean

    Dim iContador As Integer

    fnVerificaSubCategoriaNaLista = False

    If cmbSubCategoria.ListCount <> 0 Then


        For iContador = 0 To cmbSubCategoria.ListCount - 1
            If cmbSubCategoria.List(iContador) = pSubCategoria Then
                fnVerificaSubCategoriaNaLista = True
            End If
        Next

   End If


End Function

Gostaria de saber o que está errado. Desde já agradeço!

3 respostas

Eu percebi o que está havendo, agora preciso saber como tratar. Por exemplo:

Tenho a coluna SubCategoria. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Se eu deixar uma linha sem preencher, as demais abaixo da linha vazia, não entra no combobox. Então acredito que seja esse o problema. Teoricamente não pode deixar vazia, ou então precisa fazer um tratamento no código. Ou então deixar com um traço, menos deixar vazio (em branco).

solução!

Olá Marcelo, tudo bem? Espero que sim!

Ao utilizar o loop Do While Sheets("DB_FINANCEIRO").Range("G" & iContador) <> vbNullString, você está colocando a condição de que o loop só irá rodar caso a célula seja diferente de vazia. Portanto se tiver alguma célula em branco na coluna, o código irá parar de executar a partir daquela célula em questão.

Por isso, você deve modificar a planilha ou avaliar o critério de parada do seu loop para que acrescente os valores após a célula em branco.

Qualquer dúvida estou à disposição.

Bons estudos!

Entendi. Eu acabei modificando na própria planilha, para evitar erros. Obrigado pelo feedback.