Tratamento de Erros 03

Data de publicação: Apr 27, 2014 3:57:52 PM

Implemente um programa em VBasic que permita calcular o resultado de um valor elevado a um determinado expoente.

Função Err.Number

Deverá prever dois erros possíveis:

Erro número 6: Se o valor for muito grande (stack overflow) deve mostrar a mensagem "Número demasiado grande"

Error code Error message ---------- -------------

6 Overflow

Erro número 13: Se não indicar valores para a base ou expoente deve mostrar a mensagem "Indique valores da base e expoente"

Error code Error message ---------- -------------

13 Type mismatch

Função Err.Number

Texto retirado do site: http://www.ambienteoffice.com.br/officevba/tratamento_de_excecao/

Err.Number é um valor que assume o valor maior que 0 caso um erro seja encontrado em tempo de execução. Dependendo da natureza do erro, esse valor é diferente. Há uma tabela nesse link que mostra todos os erros possíveis de serem tratados com a instrução On Error:http://support.microsoft.com/kb/146864. No entanto, a forma que faço para identificar o valor de um erro é forçá-lo no meu código e, em modo de depuração, escrever o comando Debug.Print Err.Number, para visualizá-lo na Janela de Verificação Imediata.

Se seu valor for 0, significa que não houve erro (traduzindo isso para o exemplo acima, significaria que a Pasta de Trabalho indicada abriu com sucesso).

O teste condicional, ao verificar que Err.Number é maior que 0, mostra uma Caixa de Mensagem e em seguida sai da rotina.

Use essa instrução com cuidado. Algumas pessoas têm o hábito de usar essa instrução durante todo o código para que o mesmo não seja interrompido pela Caixa de Diálogo padrão de erro do VBA. No entanto, lembre-se: On Error Resume Next evita os erros, mas não oscorrige.

On Error GoTo (rótulo)

Observe o código abaixo:

Sub Tratamento() On Error GoTo ErroTratamento Sheets("Plan99").Activate MsgBox "A Planilha 'Plan99' está ativa!" _ , vbInformation _ , "Informação" Exit Sub ErroTratamento: If Err.Number = 9 Then 'Código 9: significa que Planilha não existe. 'Deveremos criá-la. Sheets.Add.Name = "Plan99" Resume End IfEnd Sub

A linha On Error GoTo ErroTratamento significa que se um erro for encontrado em tempo de execução, o código saltará para o rótuloErroTratamento.

O erro de valor 9 corresponde que um objeto não foi encontrado. O objeto, neste caso, é a planilha de nome Plan99. Quando o teste condicional verifica que o erro é de valor 9, toma uma medida para corrigir a situação, criando a Planilha que originou o erro, e em seguida há a instrução Resume, que pode estar em três formas:

-Resume é uma instrução que retorna para a mesma linha em que houve o erro, neste caso Sheets("Plan99").Activate.

-Resume Next é uma instrução que retorna para a próxima linha em que houve o erro, neste a instrução MsgBox.

-Resume (rótulo) é uma instrução que retorna para um rótulo específico, exemplificado ao fim desta seção.