none
Filtro com TextBox e ComboBox RRS feed

  • Pergunta

  • olá sou novo por aqui e estou com uma dúvida em VBA eu tenho um Useform onde ele tem uma TextBox e uma ComboBox   gostaria de fazer um filtro por exemplo com turnos ou seja na ComboBox estará os turnos Manhã, Tarde e Noite e na TextBox eu escreveria a matéria em relação a cada turno

    ex.: quero os alunos do curso de portugues da manhã escolheria manhã na ComboBox e digitaria a matéria na TextBox ou Alunos de Matématica pela tarde , e o resultado da busca aparecesse em uma ListView ou ListBox alguem pode ajudar ficarei muito grato


    terça-feira, 2 de dezembro de 2014 17:29

Respostas

  • '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
    


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Aprendiz VBA quarta-feira, 3 de dezembro de 2014 23:54
    quarta-feira, 3 de dezembro de 2014 21:04
    Moderador

Todas as Respostas

  • '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
    


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Aprendiz VBA quarta-feira, 3 de dezembro de 2014 23:54
    quarta-feira, 3 de dezembro de 2014 21:04
    Moderador
  • '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


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    Cara Você é D+ Valeu Meu Brother Salvou Meu dia Meus Parabéns Abracos e me desculpe mas abusando da sua boa vontade se eu quisesse colocar uma textbox para aparecer o numero de alunos que estão matriculados em cada curso e turno como deveria proceder e eu consegui adcionar o nome , telefonr, curso, turno para aparecer na listbox so que está aparecendo um embaixo do outro queria que aparecesse na horizontal 

    ex,: ta aparecendo assim

    carlos

    312-4567

    Potuguês

    Manhã

    como faço para ficar um ao lado do outro




    • Editado Aprendiz VBA quinta-feira, 4 de dezembro de 2014 01:34
    quarta-feira, 3 de dezembro de 2014 23:56
  • '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


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    Cara Você é D+ Valeu Meu Brother Salvou Meu dia Meus Parabéns Abracos e me desculpe mas abusando da sua boa vontade se eu quisesse colocar uma textbox para aparecer o numero de alunos que estão matriculados em cada curso e turno como deveria proceder e eu consegui adcionar o nome , telefonr, curso, turno para aparecer na listbox so que está aparecendo um embaixo do outro queria que aparecesse na horizontal 

    ex,: ta aparecendo assim

    carlos

    312-4567

    Potuguês

    Manhã

    como faço para ficar um ao lado do outro




    amigo consegui fazer obrigado por fazer a maior parte me ajudou muito
    sábado, 6 de dezembro de 2014 03:15