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

Caixa de combinação com itens repetidos

Olá,

Ao realizar o passo a passo da aula anterior, ao rodar o código, minha caixa de combinação ficou com itens repetidos. Tenho 22 "Utilitário Pequeno" em minha caixa de combinação. O filtro está funcionando, mas com este pequeno problema de itens repetidos.

Grato!

5 respostas

Fala Rodolfo, tudo bem?

Demorei um pouco para responder, então não sei se já resolveu seu problema. Fazer códigos VBA pode ter uma certa dose de "detalhismo" e algumas pequenas diferenças na sintaxe fazem toda a diferença na execução do código.

Caso ainda não tenha resolvido, por favor, coloque aqui o código que você fez para que possamos analisar juntos.

Obrigado pela pergunta ;)

Roberto Sabino.

Olá, Roberto! Tudo bem! E com você?

Ainda não resolvi o problema. Passei o código inteiro, mas não descobri o "erro".

Segue o código do form que montei acompanhando sua aula...

'Executa o filtro para preencher o Dashborad

Private Sub cmdFiltrar_Click()

'Seleciona a base de dados filtrada com o filtro avançado
Sheets("Base Filtrada").Select

'Limpa os filtros que estão ativos no momento
Range("A2:M2").Select
Selection.ClearContents

'Preenche com os filtros digitados no form
Range("A2") = Trim(txtNomeCliente)
Range("D2") = Trim(txtValorContrato)
Range("F2") = Trim(txtPeso)
Range("G2") = Trim(cmbTipoVeiculo)

'Filtra os dados e preenche o Dashborad
FiltrarBase
Sheets("Dashboard").Select

End Sub

'Esta verificação foi adicionada para evitar filtros desnecessários 'Validação do campo Peso

Private Sub txtPeso_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If Len(txtPeso) > 0 Then If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End If Else If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 60 And KeyAscii <> 62 Then KeyAscii = 0 End If End If End Sub

'Esta verificação foi adicionada para evitar filtros desnecessários 'Validação do campo Valor do Contrato

Private Sub txtValorContrato_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If Len(txtValorContrato) > 0 Then If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End If Else If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 60 And KeyAscii <> 62 Then KeyAscii = 0 End If End If 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
            fnVeirificaVeiculoNaLista = True
        End If
    Next

End If

End Function

Fala Rodolfo!

Observe que na última instrução da função de verificar veículo na lista, está escrito fnVeirificaVeiculoNaLista.

Esse "i" a mais faz toda a diferença.

Ao não responder corretamente a função, tudo volta com valor errado...

Para facilitar, escreva na primeira linha do código:

Option Explicit

Para impedir que siga com esses erros de digitação.

Pode ter algum outro erro desse tipo, porque não rodei o código, apenas li.

Veja se resolve, qualquer coisa, faça outro post se precisar ;)

Abraços!

Perfeito, Roberto!!

Grande mestre!

Muito obrigado pela ajuda!

solução!

\o/

Legal! Que bom que resolveu!