PROBLEMAS COM A PROPRIEDADE LIST DO COMBOBOX

MCASSAO 29/10/2013 16:04:22
#430504
Boa tarde Pessoal!!
Sou novo por aqui, e estou com um probleminha em um formulário no excel e gostaria da ajuda de vcs.
tenho uma combobox com os nomes de clientes que é alimentado através do seguinte código:

Private Sub ComboBox3_Change()
[ô]quando mudar o cliente, carregar as moendas correspondentes
Call carregamoendas(Me.ComboBox3.List(Me.ComboBox3.ListIndex))
End Sub

Bom...esse código trabalha aliado com um outro e está funcionando perfeitamente. Porém, se ao invés de selecionar um cliente da lista o usuário resolver digitar acontece o seguinte:
- Quanto ele digita, por exemplo, a letra A e existe um cliente que começa com A, esse cliente aparece na combobox;
- Se em seguida ele digitar a letra L e tiver um cliente na lista que a primeira letra seja A e a segunda L, então esse cliente assume a combobox;
- Mas se ele digitar, por exemplo, a letra T em seguida e não tiver nenhum cliente que a primeira letra seja um A, a segunda um L e a terceira um T, então ele dá um erro dizendo: [Ô]Não foi possível obter a propriedade List.Índice de matriz de propriedade inválido[Ô].

Entendo que ele deu esse erro por não encontrar na lista um cliente com essa sequência de letras. Porém gostaria de saber como posso informar o usuário para tentar outra combinação de letras, ou mesmo fazer com que a combobox assuma a ultima combinação de letras encontrada?
A questão seria fazer com que o usuário não seja perturbado com uma parada do programa.

Obrigado!
Abraços
Marcos
TUNUSAT 30/10/2013 13:15:49
#430536
Resposta escolhida
Marcos Cassao,


Existem várias formas a saber:
1º) Utilizar tratamento de erro no código;
2º) Adaptar a sub [Ô]carregamoendas[Ô] para que ela trate o erro.

Se você postar o código da [Ô]carregamoendas[Ô] pode ajudar também.


[][ô]s,
Tunusat.
MCASSAO 31/10/2013 07:32:46
#430565
Citação:

:
Marcos Cassao,


Existem várias formas a saber:
1º) Utilizar tratamento de erro no código;
2º) Adaptar a sub [Ô]carregamoendas[Ô] para que ela trate o erro.

Se você postar o código da [Ô]carregamoendas[Ô] pode ajudar também.


[][ô]s,
Tunusat.



Bom dia Tunusat,
Desde já muito obrigado pelo apoio!

Segue abaixo o restante do código para que vc possa ter uma idéia do que preciso:

Private Sub ComboBox3_Change()
[ô]quando mudar o cliente, carregar as moendas correspondentes
Call carregamoendas(Me.ComboBox3.List(Me.ComboBox3.ListIndex))
End Sub

Private Sub UserForm_Initialize()
[ô]quando abrir o formulário, carregar os clientes
Call carregaclientes
End Sub

Private Sub carregaclientes()
[ô]carrega os clientes
Dim linha As Integer, coluna As Integer
linha = 2
coluna = 1
Me.ComboBox3.Clear
With Sheets([Ô]clientes[Ô])
Do While Not IsEmpty(.Cells(linha, coluna))
Me.ComboBox3.AddItem .Cells(linha, coluna).Value
linha = linha + 1
Loop
End With
End Sub

Private Sub carregamoendas(ByVal clientes As String)
[ô]carrega as moendas em função do cliente
Dim linha As Integer, colunamoendas As Integer, colunaclientes As Integer
linha = 2
colunaclientes = 1
colunamoendas = 2
colunamoendas1 = 3
colunamoendas2 = 4
colunamoendas3 = 5
colunamoendas4 = 6
Me.ComboBox4.Clear
With Sheets([Ô]clientes[Ô])
Do While Not IsEmpty(.Cells(linha, colunamoendas))
If .Cells(linha, colunaclientes).Value = clientes Then
Me.ComboBox4.AddItem .Cells(linha, colunamoendas).Value
Me.ComboBox4.AddItem .Cells(linha, colunamoendas1).Value
Me.ComboBox4.AddItem .Cells(linha, colunamoendas2).Value
Me.ComboBox4.AddItem .Cells(linha, colunamoendas3).Value
Me.ComboBox4.AddItem .Cells(linha, colunamoendas4).Value
End If
linha = linha + 1
Loop
End With
End Sub

Observação: a combobox3 corresponde à clientes, e a combobox4 corresponde à moendas.

Obrigado!
Abraço
TUNUSAT 31/10/2013 13:01:53
#430591
Boa tarde Marcos Cassao,

Inseri um tratamento para o [Ô]ComboBox3_Change[Ô] simples. Verifiquei com um [Ô]If[Ô] se a [Ô]ListIndex[Ô] é igual amenos um. Se for [Ô]-1[Ô] então quer dizer que a resposta para a Combo está vazia e pula o tratamento. Por favor, faça o teste e veja se é isto que você precisa. Abaixo o código modificado.

  
Private Sub ComboBox3_Change()

[ô]quando mudar o cliente, carregar as moendas correspondentes
If Not Me.ComboBox3.ListIndex = -1 Then
Call carregamoendas(Me.ComboBox3.List(Me.ComboBox3.ListIndex))
End If

End Sub



[][ô]s,
Tunusat.
MCASSAO 01/11/2013 10:49:47
#430629
Citação:

:
Boa tarde Marcos Cassao,

Inseri um tratamento para o [Ô]ComboBox3_Change[Ô] simples. Verifiquei com um [Ô]If[Ô] se a [Ô]ListIndex[Ô] é igual amenos um. Se for [Ô]-1[Ô] então quer dizer que a resposta para a Combo está vazia e pula o tratamento. Por favor, faça o teste e veja se é isto que você precisa. Abaixo o código modificado.

  
Private Sub ComboBox3_Change()

[ô]quando mudar o cliente, carregar as moendas correspondentes
If Not Me.ComboBox3.ListIndex = -1 Then
Call carregamoendas(Me.ComboBox3.List(Me.ComboBox3.ListIndex))
End If

End Sub



[][ô]s,
Tunusat.



Bom dia Tunusat!!
Cara, é exatamente o que eu precisava...agora o usuário não será mais incomodado com a interrupção do programa.

Muitissimo obrigado!!
Marcos
Tópico encerrado , respostas não são mais permitidas