FILTRO LISTBOX COM TEXTBOX (ERROR 381)

 Tópico anterior Próximo tópico Novo tópico

FILTRO LISTBOX COM TEXTBOX (ERROR 381)

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#490353 - 06/09/2019 14:28:33

PABLOMOREIRAGV
GOVERNADOR VALADARES
Cadast. em:Julho/2010


Última edição em 09/09/2019 08:42:56 por PABLOMOREIRAGV

Ol,
        Estou fazendo um formulrio de cadastro, onde eu clico em um item no Litsbox, e os dados so carregados no formulrio com base em uma planilha. Tudo estava funcionando bem, at que eu fui fazer um filtro no listbox, com o que fosse digitado no campo NOME FANTASIA, e comeou dar erro. O filtro funciona direitinho, mas ao clicar no item do listbox que deveria carregar o formulrio vm o erro. Queria que os dados fossem carregados nos campos como antes, s que agora, sejam as informaes do item filtrado. Estou postando um imagnes exemplo, e abaixo os cdigos que esto atualmente nos controles. Desde j agradeo.

Mensagem de Erro: ERRO EM TEMPO DE EXECUO 381: No foi possvel obter a propriedade List. ndice de matriz de propriedade invlido.

Cdigo do Textbox que faz o filtro no Listbox

Private Sub txt_nome_fantasia_Change()
    Dim guia As Worksheet
    Dim linha As Integer
    Dim coluna As Integer
    Dim linhalistbox As Integer
    Dim valor_celula As String
    Dim conta_registros As Integer
    Dim valor_pesquisado As String
    Dim produtos
    Set guia = ThisWorkbook.Worksheets([]Fornecedor[])
    
    valor_pesquisado = Me.txt_nome_fantasia.Text
    
    linha = 3
    coluna = 6
    linhalistbox = 0
    conta_registros = 0
    
    Me.ListBox2.Clear
    
    With guia
        While .Cells(linha, coluna).Value <> Empty
            valor_celula = .Cells(linha, coluna).Value
            
            If UCase(Left(valor_celula, Len(valor_pesquisado))) = UCase(valor_pesquisado) Then
                
             With Me.ListBox2
             .AddItem
             .List(linhalistbox, 0) = Sheets([]Fornecedor[]).Cells(linha, 1)
             .List(linhalistbox, 1) = Sheets([]Fornecedor[]).Cells(linha, 2)
             .List(linhalistbox, 2) = Sheets([]Fornecedor[]).Cells(linha, 3)
             .List(linhalistbox, 3) = Sheets([]Fornecedor[]).Cells(linha, 4)
             .List(linhalistbox, 4) = Sheets([]Fornecedor[]).Cells(linha, 5)
             .List(linhalistbox, 5) = Sheets([]Fornecedor[]).Cells(linha, 6)
             .List(linhalistbox, 6) = Sheets([]Fornecedor[]).Cells(linha, 7)
             .List(linhalistbox, 7) = Sheets([]Fornecedor[]).Cells(linha, 8)
             .List(linhalistbox, 8) = Sheets([]Fornecedor[]).Cells(linha, 9)
             .List(linhalistbox, 9) = Sheets([]Fornecedor[]).Cells(linha, 10)
            
            
              linhalistbox = linhalistbox + 1
             conta_registros = conta_registros + 1
             End With
                
            End If
            linha = linha + 1
        Wend
    End With
[]    filtro2 [] chama o procedimento segundo filtro que mostra o cdigo da empresa[] segundo filtro que mostra o cdigo da empresa
    produtos = conta_registros & []  Produtos Cadastrados[]
End Sub

=====================================================================================

Cdigo do Listbox que carrega os campos do formulro

Private Sub ListBox2_Change()

txt_cod_sap.Text = ListBox2.List(ListBox2.ListIndex, 0)
txt_status.Text = ListBox2.List(ListBox2.ListIndex, 1)
txt_cnpj.Text = ListBox2.List(ListBox2.ListIndex, 2)
txt_razao_social.Text = ListBox2.List(ListBox2.ListIndex, 3)
txt_nome_fantasia.Text = ListBox2.List(ListBox2.ListIndex, 4)
txt_insc_estadual.Text = ListBox2.List(ListBox2.ListIndex, 5)
txt_email.Text = ListBox2.List(ListBox2.ListIndex, 6)
cbx_ramo.Text = ListBox2.List(ListBox2.ListIndex, 7)
txt_nome_contato.Text = ListBox2.List(ListBox2.ListIndex, 8)
txt_contato_fone.Text = ListBox2.List(ListBox2.ListIndex, 9)
txt_logradouro.Text = ListBox2.List(ListBox2.ListIndex, 12)
txt_cidade.Text = ListBox2.List(ListBox2.ListIndex, 13)
cbx_recibo.Text = ListBox2.List(ListBox2.ListIndex, 14)
cbx_pagamento.Text = ListBox2.List(ListBox2.ListIndex, 15)
cbx_prazo.Text = ListBox2.List(ListBox2.ListIndex, 16)
    
End Sub





Pablo Moreira

#490373 - 10/09/2019 01:14:54

JABA
CABO FRIO
Cadast. em:Agosto/2005


Cara, difcil apurar onde est o erro. O erro est dizendo que o objeto que est sendo manipulado no contm a propriedade List. No tenho certeza, mas me parece que esse objeto o guia(Worksheet). Uma outra coisa provvel que possa estar levando a esse erro que voc est declarando suas variveis dentro do evento change. Com isso, elas esto sendo limpadas toda vez que voc pressiona uma tecla nessa caixa de texto.


_______________________________________________________________________________________________

Se a alma ou esprito so imateriais, como eles fazem para se localizar quando o corpo est em movimento?



#490376 - 10/09/2019 09:22:58

PABLOMOREIRAGV
GOVERNADOR VALADARES
Cadast. em:Julho/2010


Última edição em 10/09/2019 09:26:46 por PABLOMOREIRAGV

 Anexos estao visíveis somente para usuários registrados

Segue modelo do que estou fazendo. Ela de meu uso pessoal. Veja que a medida em que se preenche o campo NOME FANTASIA, o listbox aplica o filtro. O que eu queria, era que depois de filtrado, ao clicar no item do listbox, os campos TEXTBOX[]s sejam preenchidos. S que ao fazer isso, vm o erro. Antes de inserir o cdigo do filtro, o preenchimento funcionava normalmente, mas, preciso do filtro pois so muitos fornecedores para encontrar.

Obrigado


Pablo Moreira

Resposta escolhida #490407 - 12/09/2019 13:56:40

FILMAN
PRESIDENTE PRUDENTE
Cadast. em:Março/2010


 Anexos estao visíveis somente para usuários registrados

Pablo, o erro origina no CHANGE do seu campo NOME_FANTASIA, pois o mesmo est sendo modificado, voc pode tratar isso com uma varivel.

[]Essa declarao no General do FORM. Junto com as demais do j declaradas no Option Explicit
Private bPesquisouClicou As Boolean



Private Sub txt_nome_fantasia_Change()
    Dim guia As Worksheet
    Dim linha As Integer
    Dim coluna As Integer
    Dim linhalistbox As Integer
    Dim valor_celula As String
    Dim conta_registros As Integer
    Dim valor_pesquisado As String
    Dim produtos
    
    If bPesquisouClicou = False Then
        []Todo o cdigo aqui
    End If
End Sub


[]O evento CHANGE do LISTBOX2 copie o cdigo e deixe dentro do evento DBLCLICK atribuindo a varivel criada
Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    bPesquisouClicou = True
    
    If Me.ListBox2.ListIndex >= 0 Then
        txt_cod_sap.Text = ListBox2.List(ListBox2.ListIndex, 0)
        txt_status.Text = ListBox2.List(ListBox2.ListIndex, 1)
        txt_cnpj.Text = ListBox2.List(ListBox2.ListIndex, 2)
        txt_razao_social.Text = ListBox2.List(ListBox2.ListIndex, 3)
        txt_nome_fantasia.Text = ListBox2.List(ListBox2.ListIndex, 4)
        txt_insc_estadual.Text = ListBox2.List(ListBox2.ListIndex, 5)
        txt_email.Text = ListBox2.List(ListBox2.ListIndex, 6)
        cbx_ramo.Text = ListBox2.List(ListBox2.ListIndex, 7)
        txt_nome_contato.Text = ListBox2.List(ListBox2.ListIndex, 8)
        txt_contato_fone.Text = ListBox2.List(ListBox2.ListIndex, 9)
        []txt_logradouro.Text = ListBox2.List(ListBox2.ListIndex, 12)
        []txt_cidade.Text = ListBox2.List(ListBox2.ListIndex, 13)
        []cbx_recibo.Text = ListBox2.List(ListBox2.ListIndex, 14)
        []cbx_pagamento.Text = ListBox2.List(ListBox2.ListIndex, 15)
        []cbx_prazo.Text = ListBox2.List(ListBox2.ListIndex, 16)
    End If

    bPesquisouClicou = False
End Sub


* Remover os eventos CHANGE e CLICK da LISTBOX2

No CHANGE do Textbox NOME_FANTASIA, voc atribui somente 10 colunas, mas na hora de preencher os campos do FORM voc est tentando buscar mais indexao do que existe na LISTBOX2. Isso faz com que apresente erro no cdigo devido o processo estar estourando o ndice da capacidade do LIST. Nesse caso os campos acima comentado dentro do cdigo DBLCLICK, deixariam de existir no DBLCLICK, mas se voc corrigir o CHANGE do NOME_FANTASIA, pode ser que resolva.


Caso possua mtodos que so genricos eu sugiro que faa eles em um mdulo para que seu FORM tenha somente cdigos que realmente precise dentro dele, e tambm os cdigo comentados se no for utiliza-los bom remover para deixar mais limpo seu cdigo.

Segue planilha modificada.


  
  
Instruir-te-ei, e ensinar-te-ei o caminho que deves seguir; guiar-te-ei com os meus olhos. (Salmos 32:8)

www.cursoexcelvba.com.br

#490409 - 12/09/2019 15:28:09

PABLOMOREIRAGV
GOVERNADOR VALADARES
Cadast. em:Julho/2010


Obrigado FILMAN, funcionou certinho... agradeo muito ....

abs...

Pablo Moreira

 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por PABLOMOREIRAGV em 12/09/2019 15:28:25