Notifications
Clear all

Erro 381 ao utilizar LISTBOX. Matriz definida normalmente.

19 Posts
2 Usuários
0 Reactions
2,759 Visualizações
felipemazz
(@felipemazz)
Posts: 59
Trusted Member
Topic starter
 

Bom dia Pessoal, tudo bem?
Primeiro post meu aqui! hahaha
Até agora, havia conseguido resolver todos os problemas com outros users que já haviam postado problemas iguais, mas cheguei a um que não encontro a solução :(

Vamos lá.

Eu estou fazendo um programa pra minha irma em VBA, para o escritório dela. O problema meu é no formulário ConsultaContatos.
Eu fiz um primeiro teste ontem com o nome dela, e consegui perfeitamente usar. Ou seja, quando eu digito o nome dela no campo NOME (evento txt_CLIENTENOME_Change), aparecem os dados dela, e no ListBox lá em baixo aparece todos os processos que ela estaria envolvida.
Hoje fui fazer um teste com meu nome, (nome que não está no banco de dados de contatos), e Obtive o seguinte erro:

"Erro em Tempo de execução '381':

Não foi possível definir a propriedade List. Índice de matriz de propriedade inválido."

Porém, após isso, não consigo utilizar mais o programa nem para as pessoas que estão no banco de dados, só funciona com o primeiro nome que testei, que é "Angélica Oliveira Mazzaro".

Li em alguns lugares que poderia ser erro na minha matriz, ou seja, o linhalistbox (variável que estou utilizando para a linha do listbox) poderia não existir, sei lá. Tentei utilizar a Inspeção de Variável, e também não foi de grande ajuda.

Enfim, eu não consigo entender, o porque busca o primeiro nome, e o segundo que eu utilizo não.

Para entender como funciona os formulários: Quando eu digito um nome de alguém no formulário ConsultaContatos, eu posso cadastrar um processo para ele. Quando eu digito novamente o nome dele no ConsultaContatos, Busca todos os processos cadastrados para este usuários no ConsultaContatos.lst_busca . E se eu dou 2 cliques em algum destes processos, eu abro os andamentos deste processo. Enfim, tá complicado resolver este problema hahahahaha

Alguém pode dar uma luz?

Muito obrigado, abraços!

 
Postado : 05/01/2017 7:39 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia Felipe,

Cara, estou dando uma olhadinha aqui...
Vou excluir o arquivo. Envie-o novamente sem informações muito confidenciais (telefone, CPF, email...)

A maioria aqui está para ajudar e acredito não haver problema... Mas o download do arquivo está aberto. Basta fazer cadastro no fórum.

Qualquer coisa da o grito.
Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 05/01/2017 8:13 am
felipemazz
(@felipemazz)
Posts: 59
Trusted Member
Topic starter
 

Consegui excluir, vou enviar de novo sem os dados hahaha
Obrigado Bernrdo!

 
Postado : 05/01/2017 8:17 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Faça essas substituições:

Private Sub lst_busca_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
If Me.lst_busca.ListCount < 1 Then
    MsgBox "Nenhum processo localizado"
    Exit Sub
End If
ID = lst_busca.Column(0)
Nprocesso = lst_busca.Column(1)
Situacao = lst_busca.Column(8)
Andamentos.txt_ID = ID
Load Andamentos
Andamentos.Caption = "Informações/Andamentos - Processo: " & Nprocesso
Andamentos.txt_NProcesso = Nprocesso
Andamentos.txt_Situacao = Situacao
Andamentos.Show
End Sub

e

Private Sub txt_CLIENTENOME_Change()
    Dim Intervalo As Range
    With Sheets("Contatos").Range("C:C")
        Set Intervalo = .Find(What:=txt_CLIENTENOME, _
                                After:=.Cells(1), _
                                LookIn:=xlValues, _
                                LookAt:=xlWhole, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlPrevious, _
                                MatchCase:=False)
        If Not Intervalo Is Nothing Then
            txt_NomeMaeAtt = Intervalo.Offset(0, 16)
            txt_TelefoneAtt = Intervalo.Offset(0, 1)
            txt_TelefoneAtt2 = Intervalo.Offset(0, 13)
            cb_EmpresaAtt = Intervalo.Offset(0, 12)
            txt_EMAILAtt = Intervalo.Offset(0, 7)
            txt_RGAtt = Intervalo.Offset(0, 5)
            txt_CPFAtt = Intervalo.Offset(0, 6)
            txt_NITAtt = Intervalo.Offset(0, 15)
            txt_NascAtt = Intervalo.Offset(0, 14)
            txt_EndAtt = Intervalo.Offset(0, 8)
            txt_CEPAtt = Intervalo.Offset(0, 9)
            txt_CityAtt = Intervalo.Offset(0, 10)
            cb_EstadoAtt = Intervalo.Offset(0, 11)
            If Intervalo.Offset(0, 17) = "PF" Then
                txt_PFPJ.Caption = "Pessoa Física"
            ElseIf Intervalo.Offset(0, 17) = "PJ" Then
                txt_PFPJ.Caption = "Pessoa Jurídica"
            Else
                txt_PFPJ.Caption = "Não Definido"
            End If
        Else
            txt_NomeMaeAtt = Empty
            txt_TelefoneAtt = Empty
            txt_TelefoneAtt2 = Empty
            cb_EmpresaAtt = Empty
            txt_EMAILAtt = Empty
            txt_RGAtt = Empty
            txt_CPFAtt = Empty
            txt_NITAtt = Empty
            txt_NascAtt = Empty
            txt_EndAtt = Empty
            txt_CEPAtt = Empty
            txt_CityAtt = Empty
            cb_EstadoAtt = Empty
            txt_PFPJ.Caption = Empty
        End If
    End With



Dim contador As Integer
Dim conta_lista As Integer

''Adiciona os dados a listbox
linha = 2
linhalistbox = 0
lst_busca.Clear
Do Until Worksheets("Processos").Cells(linha, 2) = ""
    If Worksheets("Processos").Cells(linha, 4).Value = txt_CLIENTENOME Then
        With Me.lst_busca
                .AddItem
                .List(linhalistbox, 0) = Worksheets("Processos").Cells(linha, 2) 'ID
                .List(linhalistbox, 1) = Worksheets("Processos").Cells(linha, 3) 'Nro processo
                .List(linhalistbox, 2) = Worksheets("Processos").Cells(linha, 5) 'cLIENTE reu ou adverso
                .List(linhalistbox, 3) = Worksheets("Processos").Cells(linha, 6) 'Parte Adversa
                .List(linhalistbox, 4) = Worksheets("Processos").Cells(linha, 11) 'Ação
                .List(linhalistbox, 5) = Worksheets("Processos").Cells(linha, 12) 'Vara
                .List(linhalistbox, 6) = Worksheets("Processos").Cells(linha, 13) 'Orgão Julgador
                .List(linhalistbox, 7) = Worksheets("Processos").Cells(linha, 14) 'Juízo
                .List(linhalistbox, 8) = Worksheets("Processos").Cells(linha, 1)  'Situação
        End With
    End If
    
    linha = linha + 1
    linhalistbox = linhalistbox + 1
    conta_lista = conta_lista + 1
Loop

End Sub

Qualquer coisa da o grito.
Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 05/01/2017 8:22 am
felipemazz
(@felipemazz)
Posts: 59
Trusted Member
Topic starter
 

Pronto, agora só tem 2 processos, nenhum contato.
O contato que continua funcionando é o Angelica Da Silva Ortiga. o que não funciona é: Felipe Oliveira Mazzaro.

Continua com o mesmo Erro Bernardo :(

O erro dá na linha: .List(linhalistbox, 0) = Worksheets("Processos").Cells(linha, 2) 'ID
Ao que me parece, ele não está identificando que estou fechando o argumento do .List, pois quando passo para a frente do IGUAL, ele volta a aparecer para eu digitar o primeiro arguemtno do List (que seria a linha).

Outro detalhe!

Se eu tento utilizar o comando sem o With, acontece o seguinte:

Tento utilizar o comando:

Me.lst_busca.AddItem.List(etc...) = Tal tal

Ele dá erro no AddItem, e diz que esperava uma Sub ou uma Function.

 
Postado : 05/01/2017 8:28 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Está sem contato nenhum nesse último anexo.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 05/01/2017 8:32 am
felipemazz
(@felipemazz)
Posts: 59
Trusted Member
Topic starter
 

Está sem contato nenhum nesse último anexo.

isso Bernarndo. eu deixei sem contato, mas se digitar o nome completo de Angelica Da Silva Ortiga ou Felipe Oliveira Mazzaro, irá funcionar, pois os processos existem, entendeu?

O Form não está dependendo de existir o contato para utilizá-lo. Eu deixei desta maneira pois foi solicitado pela minha irmã hahaha

 
Postado : 05/01/2017 8:34 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Entendi...
Está acrescentando linhas no listbox independentemente de haver ou não o processo com o nome dele. basta alterar o local.
Deixa assim:

Do Until Worksheets("Processos").Cells(linha, 2) = ""
    If Worksheets("Processos").Cells(linha, 4).Value = txt_CLIENTENOME Then
        With Me.lst_busca
                .AddItem
                .List(linhalistbox, 0) = Worksheets("Processos").Cells(linha, 2) 'ID
                .List(linhalistbox, 1) = Worksheets("Processos").Cells(linha, 3) 'Nro processo
                .List(linhalistbox, 2) = Worksheets("Processos").Cells(linha, 5) 'cLIENTE reu ou adverso
                .List(linhalistbox, 3) = Worksheets("Processos").Cells(linha, 6) 'Parte Adversa
                .List(linhalistbox, 4) = Worksheets("Processos").Cells(linha, 11) 'Ação
                .List(linhalistbox, 5) = Worksheets("Processos").Cells(linha, 12) 'Vara
                .List(linhalistbox, 6) = Worksheets("Processos").Cells(linha, 13) 'Orgão Julgador
                .List(linhalistbox, 7) = Worksheets("Processos").Cells(linha, 14) 'Juízo
                .List(linhalistbox, 8) = Worksheets("Processos").Cells(linha, 1)  'Situação
                linhalistbox = linhalistbox + 1 'Essa linha vai acrescentar apenas se for acrescido valor na listbox
        End With
    End If
    
    linha = linha + 1
    conta_lista = conta_lista + 1
Loop

Qualquer coisa da o grito.
Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 05/01/2017 8:43 am
felipemazz
(@felipemazz)
Posts: 59
Trusted Member
Topic starter
 

Entendi Bernardo!
Funcionou perfeitamente.
Muito obrigado mesmo!
Grande Abraço.

 
Postado : 05/01/2017 8:49 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Para o processo tem que ser apenas se tiver o nome completo?
Não pode ir preenchendo de acordo com o que vai digitando não?

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 05/01/2017 8:51 am
felipemazz
(@felipemazz)
Posts: 59
Trusted Member
Topic starter
 

Bernardo

Pode sim... Para isso teria que utilizar mid ou trim?
Qual seria a idéia?
Pois podem ter nomes parecidos, e assim daria conflito, ou pegaria o primeiro nome não sei...
Você tem alguma idéia?

Quanto mais fácil para ela utilizar melhor.

 
Postado : 05/01/2017 9:05 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não fiz o teste, mas troca essa linha:

If Worksheets("Processos").Cells(linha, 4).Value = txt_CLIENTENOME Then

Por essa:

If UCase(Worksheets("Processos").Cells(linha, 4).Value) Like UCase(txt_CLIENTENOME) & "*" And Len(txt_CLIENTENOME) > 0 Then

Qualquer coisa da o grito.
Abraço

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 05/01/2017 9:08 am
felipemazz
(@felipemazz)
Posts: 59
Trusted Member
Topic starter
 

Funcionou também Bernardo!
Muito obrigado! :D :D :D

 
Postado : 05/01/2017 9:22 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

;)

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 05/01/2017 9:25 am
felipemazz
(@felipemazz)
Posts: 59
Trusted Member
Topic starter
 

Bernardo, deixa eu aproveitar perguntar para você, que eu pesquisei muito na internet há muito tempo isso, e não achei se isso é possível.

Eu gostaria, que quando tivesse em qualquer parte do formulário, e apertasse o ESC, saísse do mesmo.
Eu fiz em uma das janelas, incluindo em cada um dos campos, para que quando apertasse o ESC, saísse da janela, mas se eu fizer isso para TODOS os formulários, para TODOS os campos, levaria muito tempo.
É possível fazer isso de uma maneira mais simples?

 
Postado : 05/01/2017 9:46 am
Página 1 / 2