Notifications
Clear all

Erro em tempo de execução esporádico

5 Posts
1 Usuários
0 Reactions
2,313 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa Tarde Pessoal !

Há mais de 1 ano atrás com muuuuuuito auxilio de vários colegas de fórum consegui criar a rotina abaixo. Porém recentemente percebi um problema e que não consigo compreender. Em alguns momentos a rotina apresenta um erro em tempo de execução, erro 91.Dizendo que a varíavel do objeto ou a variável do bloco "With" não foi definida no seguinte treco: i = X.Row

O mais estranho é que ela não apresenta esse erro constante, somente as vezes.

Sub ultimo()


Worksheets("HIST").Activate


Dim X As Variant, i As Variant, col As Long


Set X = Worksheets("HIST").Range("C:C").Find(What:=TextBox15.Text, After:=Worksheets("HIST").Range("C2"), LookIn:=xlValues, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)
         
i = X.Row
linha = CDbl(i)

'interpreta qual linha/coluna de ação
col = Worksheets("HIST").Range("NZ" & i).End(xlToLeft).Column
Set X = Worksheets("HIST").Range("C:C").FindNext(After:=X)

If Worksheets("HIST").Range("O" & i) = "" Then
MsgBox "Não existem registros"

btnProximo.Enabled = False
btnUltimo.Enabled = False

Label47.Enabled = False
Label45.Enabled = False

Exit Sub
End If


Acum = col
linha = X.Row
If Not X Is Nothing Then

	With Worksheets("HIST")
		TextBox2 = .Cells(i, col - 2)
		TextBox3 = .Cells(i, col - 1)
		ComboBox1 = Worksheets("HIST").Cells(i, col)
	End With

End If

End Sub
 
Postado : 12/11/2011 1:34 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Guima, é meio complicado dar uma resposta positiva

Por não ser um erro constante, o ideal seria ter o modelo e ter de ir realizando testes até a ocorrencia do mesmo, mas vou arriscar alguns palpites :

Primeiro,como o colega AleXcel, me orientou uma vez, procure declarar as variaveis explicitamente, separando-as (viewtopic.php?f=16&t=2443) :
Dim X As Variant, i As Variant, col As Long

Segundo, como a ocorrencia acontece com as Variaveis "i" e "x" (i = X.Row) e na rotina estamos utilizando "x" em duas linhas distintas, troque um dos "x" por outra variável que não consta na rotina, talvez "y", pode ser que a mesma esteja se perdendo.

Terceiro, você definiu "i" e "x" como Variant e depois efetua a conversão de i para Double na instrução linha = CDbl(i), procure alterar os tipos das variaveis, isto se for possivel, pois não sei quais os tipos de dados temos nas colunas que está utilizando o Find.

Procure fazer os testes e qualquer coisa retorne.

[]s

 
Postado : 12/11/2011 2:18 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá Mauro,

Fiz as recomendações sugeridas.

- Declarei as variáveis separadamente
-Troquei uma das variáveis x por y
- E coloquei "i" e "x" como as variáveis originais (havia definido como Variant, devido ao erro citado)

Mas mesmo assim o problema permanece.

Tô colocando um exemplo como voc~e sugeriu, uma vez que é uma situação complicada de explicar e entender.

Brigadão

 
Postado : 12/11/2011 4:33 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Guima, no teste que fiz, você definiu :

Const colRESPONSAVEL As Integer = 4 'Coluna 4 = "D"

e na Rotina
Private Sub CarregaRegistro()
Me.TextBox15.Text = .Cells(indiceRegistro, colRESPONSAVEL).Value

E na rotina Ultimo, está procurando pelo nome na Coluna "C", e como não existe da erro, ou seja, não entendi o que pretende, mas o nome tem de estar nas duas colunas.

Não procurei analizar o que pretende com esta rotina,
Coloque o Primeiro nome que é carregado no Form "Michele" na coluna "C" e verá que não da erro.

[]s

 
Postado : 12/11/2011 4:51 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Putz....

Agora fiquei até com vergonha...rs. Pensei que era uma coisa de outro mundo...rs

Mas se não fosse você ia ficar quebrando a cabeça atéeee....

Muitíssimo obrigado por mais essa.

Abraço

 
Postado : 12/11/2011 4:57 pm