[Dúvida]Tratamento de Erros

Started by Sladrak, 23 de November , 2006, 03:08:36 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Sladrak

Galera alguém pode me ajudar?
Estou com um projeto aqui, mas estou tendo um problema.
Tenho uma função e sempre que tento fazer tratamente de erros dá um problema.
Ta la assim:

on error goto erro
---
---
---
erro:
MsgBox("Ocorreu o seguinte erro:" & Err.Description, MsgBoxStyle.Critical)

Até ae OK...
Qnd eu provoco o erro, funciona perfeitamente, apresentando a descrição do erro e talz.
Mas qnd o erro não existe, pelo menos não que eu saiba, mesmo assim a msgbox ainda é mostrada só que não há descrição alguma.
E qnd não há o tratamento do erro, não acontece erro algum.
Tipo se eu tirar o "on error goto erro" e não provocar erro o projeto funciona perfeitamente.
Mas se não tirar o "on error goto erro" é apresentado a msgbox sem descrição de erro.

Como resolver alguem sabe??
 ???

Flw e obrigado...

Sladrak

Ae galera,

não consegui "arrumar" ou entender porque ocorre isto, mas consegui contornar de outra forma,
evitando as msgs sem descrição.

Mas se alguém souber possíveis motivos para tal problema seria interessante uma explicação.

Flw

PS. Em um topic do dark_side disse que o artigo dele não estava ON, e realmente não estava, mas agora está. Então se alguém(DarkSpawn??) puder apagar a minha respota ficaria grato....

Dark_Side

Hi,

Desculpe a demora, lolz.

Vamos lá.
Quando você faz:

on error goto erro
---
---
---
erro:
MsgBox("Ocorreu o seguinte erro:" & Err.Description, MsgBoxStyle.Critical)

Você declara um label denominado "erro" dentro da rotina. Da maneira acima, mesmo que um erro não ocorra, o programa irá executar o trecho referente ao label.

Outro exemplo é:
msgbox "Deve aparecer!"
lol:
msgbox "Deve aparecer também"

O que você pode fazer é finalizar o trecho de código referente às instruções iniciais, e deixar o label de erro isolado, para que seja chamado apenas quando realmente um erro ocorrer.

Você pode fazê-lo de duas maneiras:

1) Se o código estiver dentro de um Sub:

QuotePrivate Sub SubLol()
on error goto erro
---
---
---
Exit Sub ' A execução da rotina termina aqui.
erro:
MsgBox("Ocorreu o seguinte erro:" & Err.Description, MsgBoxStyle.Critical)
End Sub

Note que, quando o programa chega na instrução "Exit Sub", ele finaliza a rotina, isto é, não permite que nada que esteje localizado abaixo da instrução seja executado.
No entanto, caso algum erro ocorra, o programa iria executar o trecho referenciado pelo label "erro".

2) Se o código estiver dentro de uma função.

Neste caso, basta substituir Exit Sub por Exit Function:

QuotePrivate Sub SubLol()
on error goto erro
---
---
---
Exit Function ' A execução da rotina termina aqui.
erro:
MsgBox("Ocorreu o seguinte erro:" & Err.Description, MsgBoxStyle.Critical)
End Sub

Seria algo assim.
Qualquer coisa só falar ;)

Bye.

Sladrak

Eitaaaaaa...

Não tinha pensado nisso, achei que a instrução de erro só ocorreria se realmente tivesse ocorrido
o erro...
É algumas modificações teram que ser feitas...

Vlw Dark_Side!!!
Sou seu fã! hehehhehe...

Flw vlw msm