Site da Vetorial Treinamentos

Sistema Cadastro de Clientes

Listbox VBA – Com filtro automático de texto e cabeçalho

Quando não há exigência de muitos critérios, ou quando o número de dados à ser exibido não é muito extenso, o Listbox Vba é a opção mais adequada para listagem de dados. Com o Listbox Vba é possível exibir dados em forma de tabela e então manipula-los de acordo com a necessidade. Nesse Post você aprenderá como filtrar dinamicamente os dados do listbox ao digitar um texto dentro de uma textbox. Além disso, veremos como criar um cabeçalho personalizado e auto ajustável a qualquer Listbox.

Private Sub UserForm_Initialize()

    Dim rg      As Range
    Dim linf    As Integer
    Dim Cor01   As Variant
    Dim Cor02   As Variant
    Dim Cor03   As Variant

    Cor01 = RGB(35, 207, 222) 'RGB(253, 6, 100)
    Cor02 = RGB(43, 46, 51) 'RGB(231, 232, 237)

    Set wPlan = PlanClientes
'    Set wPlan = Application.Worksheets("Dados_Clientes")
    
    Set rg = wPlan.Range("ListaPesquisa")
    
    listaClientes.ForeColor = Cor01
    txtCliente.ForeColor = Cor01
    listaClientes.BackColor = Cor02
    
    For linf = 1 To rg.rows.Count
    
        With Me.listaClientes
        
            .ColumnWidths = "60;190;100"
            .ColumnCount = 3
            .AddItem Format(rg.Cells(linf, 0), "00000")
            .List(listaClientes.ListCount - 1, 1) = rg.Cells(linf, 1)
            .List(listaClientes.ListCount - 1, 2) = rg.Cells(linf, 2)
            
        End With
        
    Next
    
    Me.Contalbl.Caption = Me.listaClientes.ListCount & " clientes"

End Sub
Private Sub txtCliente_Change()

    Dim lstCli  As Range
    Dim vProc   As Range
    Dim vCod    As Range
    Dim vCel    As Range
    Dim vInic   As Range
    
    On Error Resume Next
    Me.listaClientes.Clear
    If Len(Me.txtCliente) = 0 Then
        Call UserForm_Initialize
        lblPesq.Visible = True
    Else

        Set lstCli = wPlan.Range("ListaPesquisa")
        Set vProc = lstCli.Find(Me.txtCliente, , , xlPart)
        Set vCod = vProc.Offset(0, -1)
        Set vCel = vProc.Offset(0, 1)
        
        lblPesq.Visible = False
        
        If Not vProc Is Nothing Then
        
            Set vInic = vProc
            
                Do
                    With Me.listaClientes

                        .ColumnWidths = "60;190;100"
                        .ColumnCount = 3
                        .AddItem Format(vCod, "00000")
                        .List(listaClientes.ListCount - 1, 1) = vProc
                        .List(listaClientes.ListCount - 1, 2) = vCel
                        
                    End With
                    
                    Set vProc = lstCli.FindNext(vProc)
                    Set vCod = vProc.Offset(0, -1)
                    Set vCel = vProc.Offset(0, 1)
                    
                Loop Until vProc.Address = vInic.Address
            
        End If
        Me.Contalbl.Caption = Me.listaClientes.ListCount & " clientes"
    End If
    
End Sub
Public Sub CriaCabecalhoLb(LbPrincipal As MSForms.ListBox, LbCabecalho As MSForms.ListBox, cabecalho As Variant)
    
    With LbCabecalho

        'Iguala o numeros de colunas do ListBox Cabeçalho ao do ListBox Principal
        .ColumnCount = LbPrincipal.ColumnCount
        .ColumnWidths = LbPrincipal.ColumnWidths
        
        'Adiciona os elementos dos cabeçalhos
        .Clear
        .AddItem
        Dim i As Integer
        For i = 0 To UBound(cabecalho)
            .List(0, i) = cabecalho(i)
        Next i
        
        'Formata o visual
        .ZOrder (0)
        .Font.Size = 9
        .Font.Bold = True
        .SpecialEffect = fmSpecialEffectFlat
        .BackColor = RGB(35, 207, 222) 'RGB(229, 13, 90)
        .Height = 13
        
        'Alinha a posição e dimensões do ListBox Cabeçalho ao ListBox Principal
        .Width = LbPrincipal.Width
        .Left = LbPrincipal.Left
        .Top = LbPrincipal.Top - (.Height - 1)
    
    End With
    
    LbPrincipal.ZOrder (1)

End Sub
Call CriaCabecalhoLb(Me.listaClientes, Me.lbCab, Array("Cód.", "Cliente", "Celular"))
Listbox com excel vba

1 thought on “Listbox VBA – Com filtro automático de texto e cabeçalho”

  1. Having read this I thought it was really informative.

    I appreciate you finding the time and effort to put this article together.

    I once again find myself personally spending way too much time both reading and leaving comments.

    But so what, it was still worthwhile!

Leave a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *