Notifications
Clear all

Tratar Estouro

9 Posts
3 Usuários
0 Reactions
1,846 Visualizações
(@mueldavc)
Posts: 24
Eminent Member
Topic starter
 

Olá Pessoal.

Eu procurei aqui no forum e achei poucos resultados que poderiam me ajudar.
Tenho uma VBA que faz alguns cálculos matemático.
Quando ele vai multiplicar por ex: "2E+256*3E+258" dá estouro, normal, mas o problema é que eu não consigo debugar o erro. O "on error goto..." não está funcionando, já tentei colocar em várias posições da planilha e não funciona. Se alguém tiver alguma idéia do que se trata eu agradeceria.

Abç a todos

 
Postado : 22/07/2014 7:43 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 


Tentou com:

On Error Resume Next

 
Postado : 22/07/2014 7:53 am
(@mueldavc)
Posts: 24
Eminent Member
Topic starter
 

Tentei... aqui vai um exemplo
Sub exemplo()
Dim a As Double
Dim b As Double

On Error GoTo passe:
a = 2E+256
b = 3E+258

C = a * b

passe:

If Err Then Stop

On Error GoTo passe:

d = a * b

End Sub

O que é estranho é que na segunda vez que ele pega o erro ele deveria reencaminha para o "passe:", mas ele não faz. Devo estar fazendo alguma coisa errada.

 
Postado : 22/07/2014 8:00 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Tente assim :

Sub exemplo()
Dim a As Double
Dim b As Double

On Error Resume Next
    a = 2E+256
    b = 3E+258
    
    C = a * b

    If Err Then Stop
    
        On Error GoTo passe:
    
        d = a * b

passe:

End Sub

[]s

 
Postado : 22/07/2014 8:31 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Ajuda?

Sub exemplo()
Dim a As Double
Dim b As Double

On Error GoTo passe:
a = 2E+256
b = 3E+258

C = a * b

passe:

If Err Then Stop

On Error GoTo -1
On Error GoTo passe:

d = a * b

End Sub
 
Postado : 22/07/2014 8:37 am
(@mueldavc)
Posts: 24
Eminent Member
Topic starter
 

Perfeito...

só não entendi o por que só funciona com esse -1...?

Vlw gtsalikis

 
Postado : 22/07/2014 10:15 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Perfeito...
só não entendi o por que só funciona com esse -1...?
Vlw gtsalikis

mueldavc, não sei como está disposta suas rotinas e se testou as dicas, mas na dica do colega gtsalikis, esta macro entrará em Loop Infinito devido exatamente ao "-1".
O "-1" na instrução On Error GoTo -1 significa para ignorar o Erro e voltar uma linha antes, assim ao se deparar com o erro "6" que é de Estouro, será direcionado a linha "If Err Then Stop" novamente, e isto se acontecerá infinitamente.
Pesquise na net ou na propria ajuda do VBA sobre a On Error GoTo e terá melhores definições, por exemplo, se utilizar:
On Error GoTo 0 você estará ignorando o erro, as vezes é necessário em determinada parte das rotinas utilizar esta instrução.

[]s

 
Postado : 22/07/2014 10:58 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Realmente, Mauro, a macro que ele postou vai entrar em loop infinito.

Porém, acredito que é apenas um exemplo para mostrar o problema, que, se eu entendi direito, é utilizar a instrução "on error goto" 2x.

Por isso sugeri usar o "-1" para limpar a primeira instrução "on error" antes de inserir a segunda.

Abs.

 
Postado : 22/07/2014 11:08 am
(@mueldavc)
Posts: 24
Eminent Member
Topic starter
 

É isso mesmo gtsalikis.

Quando eu boto a macro pra rodar, quando acontece o primeiro erro ele debuga correto, mas na segunda rodada o mesmo erro ele não debugava, pelo que eu entendi o sistema foi feito pra encontrar erro só uma vez no mesmo processo o -1 é pra resetar.

Obrigado, ajudou bastante... vivendo e aprendendo.

Abrço a todos

 
Postado : 23/07/2014 5:19 am