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"))
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!