olá a todos estou com o seguinte código que esta do jeito que eu quero "a filtragem" so que na ListBox fica aparecendo um embaixo do outro e eu quero um do lado do outro e que na TextBox logo abaixo do ListBox aparecesse a quantidade de alunos
ajudem-me por favor
'Este código deve residir no módulo de um formulário contendo:
'ComboBox1 - caixa de combinação que lista matérias
'ComboBox2 - caixa de combinação que lista turnos
'ListBox1 - caixa de listagem que lista alunos, resultantes de uma pesquisa
'Considere que na coluna A possui o nome dos alunos, na B o nome
'das matérias de cada aluno e na coluna C o turno das aulas.
'A planilha deve conter uma linha de cabeçalho.
'Altere aqui para o nome da planilha que possui os dados:
Const mcsSheetName As String = "Plan1"
Dim moSheet As Excel.Worksheet
Dim mlLast As Long
Private Sub UserForm_Initialize()
Dim clc As VBA.Collection
Dim s As String
Dim l As Long
Set moSheet = ThisWorkbook.Worksheets(mcsSheetName)
Set clc = New VBA.Collection
With moSheet
mlLast = .Cells(.Rows.Count, "B").End(xlUp).Row
'Armazena numa coleção todas as matérias disponíveis:
On Error Resume Next
For l = 2 To mlLast
s = .Cells(l, "B")
clc.Add s, s
Next l
On Error GoTo 0
'Povoa a caixa de combinação de matérias:
For l = 1 To clc.Count
ComboBox1.AddItem clc(l)
Next l
End With
'Preencher caixa de combinação de turno:
ComboBox2.AddItem "Manhã"
ComboBox2.AddItem "Tarde"
ComboBox2.AddItem "Noite"
End Sub
Private Sub CommandButton1_Click()
Dim clc As VBA.Collection
Dim l As Long
Dim s As String
ListBox1.Clear
Set clc = New VBA.Collection
With moSheet
'Armazena numa coleção todos os alunos disponíveis:
For l = 2 To mlLast
If .Cells(l, "B") Like "*" & ComboBox1 _
And .Cells(l, "C") Like "*" & ComboBox2 Then
On Error Resume Next
s = .Cells(l, "A")
clc.Add s, s
On Error GoTo 0
End If
Next l
'Povoa a caixa de listagem de alunos:
For l = 1 To clc.Count
ListBox1.AddItem clc(l)
Next l
End With
End Sub
Postado : 04/12/2014 8:22 am