Notifications
Clear all

Busca no Listview como no Google

3 Posts
2 Usuários
0 Reactions
1,200 Visualizações
(@marcoitab)
Posts: 2
New Member
Topic starter
 

Boa tarde,
essa é a minha primeira pergunta no fórum, e também sou bastante leigo porem curioso.
Qualquer coisa que eu fizer de errado por favor me corrijam .
Estou tentando adaptar um codigo do Fernando Fernandes de busca no lisbox com filtro igual o google. Só que eu gostaria de fazer essa busca em um listview com matriz,
e empaquei em uma mensagem de :
Erro de compilação
Método ou membro de dados não encontrado.
Pois não sei como carregar os dados na listview.
Se alguém poder me ajudar serei grato.

Private Sub frm_cadserviço_Initialize()
Dim Matriz      As Variant
    
    Matriz = Wsh_cadastro.Range("Lst_Serviçosnovo").Value
    Me.LstCadServServ = Matriz
End Sub

Private Sub txtNomes2_Change()
Dim mtzNomes    As Variant
Dim mtzFiltrada As Variant

    mtzNomes = Wsh_cadastro.Range("Lst_Serviçosnovo").Value
    
    If VBA.Len(Me.txtNomes2.Text) = 0 Then
        Me.LstCadServServ = mtzNomes

    Else
        mtzFiltrada = FilterArray(mtzNomes, Keep, xlNo, 2, Me.txtNomes2.Text)

        If VBA.IsArray(mtzFiltrada) Then
            [color=#FF0000]Me.LstCadServServ.Add = mtzFiltrada[/color]'Metodo ou membro de dados não encontrado.
        End If

    End If

End Sub
 
Postado : 24/07/2018 1:39 pm
(@skulden)
Posts: 170
Estimable Member
 

Cara, não vim te dar a resposta para a dúvida, só quis passar para deixar um leve comentário.

Não sei se você está fazendo isso por aprendizado ou para alguma ferramenta do trabalho. Se for para ferramenta do trabalho eu aconselho não fazer, não é computacionalmente eficiente e só vai travar a sua aplicação, consome muito processamento o código ler toda a sua matriz e carregar para a listbox toda vez que você digitar uma nova letra.

Eu precisei adaptar isso à um projeto no trabalho e eu acabei fazendo com que pesquise somente quando eu pressionar o botão de consulta, assim não consome muito a sua aplicação.

Estou anexando uma foto de como fica e a baixo coloco o código que fiz para o botão de pesquisa, veja se consegue entender e adaptar para o seu caso, se achar interessante.


Private Sub Pesquisar_Click()

Dim cotacoes_unicas As New Collection
Dim celly As Range

lista_pesquisa.Clear

Application.ScreenUpdating = False

SAP.Range("tb_sap[Num_Cotacao]").AdvancedFilter Action:=xlFilterInPlace, Unique:=True


For Each celly In SAP.Range("tb_sap[Num_Cotacao]").SpecialCells(xlCellTypeVisible)
            
       cotacoes_unicas.Add celly.Value
        
Next celly

SAP.ShowAllData
SAP.Range("tb_sap").AutoFilter

Application.ScreenUpdating = True


If pesquisar_por.Value = "" Then

    For k = 1 To cotacoes_unicas.Count
    
        lista_pesquisa.AddItem cotacoes_unicas(k)

    Next k

Else
    
    For p = 1 To cotacoes_unicas.Count
    
        If InStr(1, cotacoes_unicas(p), Trim(pesquisar_por.Value)) Then
            
            lista_pesquisa.AddItem cotacoes_unicas(p)
            
        End If
        
    Next p
        
End If

End Sub

Se a resposta lhe foi útil, clique no joinha!

 
Postado : 24/07/2018 2:54 pm
(@marcoitab)
Posts: 2
New Member
Topic starter
 

Skulden, na verdade são as duas coisas, quero aprender a trabalhar com matrizes e estou implantando essa busca em um trabalho.
Com relação ao que você me passou estou com um problema é que tenho uma listview onde preciso fazer a busca e não tenho muita facilidade ainda em adaptar códigos.
Ao tentar rodar o código tenho um mensagem de variável não definida. nessa sigla SAP que fica antes do Range.
será que você pode me ajudar?

Private Sub BtPesquisaServiço_click()

Dim cotacoes_unicas As New Collection
Dim celly As Range

LstCadServServ.ListItems.Clear


Application.ScreenUpdating = False

 SAP.Range("Lst_Serviçosnovo[Wsh_cadastro]").AdvancedFilter Action:=xlFilterInPlace, Unique:=True


For Each celly In SAP.Range("Lst_Serviçosnovo[Wsh_cadastro]").SpecialCells(xlCellTypeVisible)
            
       cotacoes_unicas.Add celly.Value
        
Next celly

SAP.ShowAllData
SAP.Range("Lst_Serviçosnovo").AutoFilter

Application.ScreenUpdating = True


If pesquisar_por.Value = "" Then

    For k = 1 To cotacoes_unicas.Count
    
        LstCadServServ.AddItem cotacoes_unicas(k)

    Next k

Else
    
    For p = 1 To cotacoes_unicas.Count
    
        If InStr(1, cotacoes_unicas(p), Trim(pesquisar_por.Value)) Then
            
            LstCadServServ.AddItem cotacoes_unicas(p)
            
        End If
        
    Next p
        
End If

End Sub

:arrow:

 
Postado : 27/07/2018 7:57 am