NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!
UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI
FILTRO DE TUTORIAIS:
Para concluir o assunto Gerenciando Erros e Exceções neste tutorial vamos aprender como usar blocos Try...Catch aninhados, o objeto Err, como você pode criar seus próprios erros e como programar defensivamente. Além disso vai aprender como usar o Exit Try.
USANDO TRY...CATCH ANINHADOS
Podemos aninhar - colocar blocos de Try...Catch um dentro de outro - para criar estruturas de tratamento mais avançadas, como o exemplo:
Try
PictureBox1.Image = System.Drawing.Bitmap.FromFile(“a:\inverno.jpg”)
Catch
MsgBox(“Insira o disquete no drive A”)
Try
PictureBox1.Image = System.Drawing.Bitmap.FromFile(“a:\inverno.jpg”)
Catch
MsgBox(“Falha ao abrir o arquivo”)
Button1.Enabled = False
End Try
End Try
A primeira mensagem de erro pede para o usuário inserir o disque e clicar em OK, se ele o fizer o programa tenta ler o arquivo, se não for possível emite a mensagem de Falha e desabilita o Button1.
Vamos fazer esse exemplo para você ver a diferença do que tínhamos feito até aqui.
1 - Ainda com o programa que abre o arquivo do disquete (veja tutorial anterior), modifique o código do evento do Button1 para o exemplo acima. Vai ficar assim:
2 - Execute aplicação e sem o disco no drive clique no botão Testar Drive.
A seguinte mensagem aparece:
3 - Insira o disco no drive e clique em OK.
Ele carrega a imagem e a exibe.
4 - Agora tire novamente o disco do drive e clique no botão.
5 - Sem colocar o disco no drive clique em OK.
A seguinte mensagem aparece.
6 - Clique em OK.
Agora o Form1 é mostrado com o Button1 desabilitado.
O código responsável por desabilitar o Button1 é o seguinte:
Button1.Enabled = False
O OBJETO ERR
O objeto Err do Visual Basic contém informações sobre os erros. Suas propriedades mais importantes são Number e Description, que mostram o número do erro e sua descrição respectivamente.
A seguinte tabela mostra os erros mais comuns e a mensagem de descrição padrão (em inglês).
Vamos continuar usando o exemplo anterior, o exemplo da imagem no drive de disquete.
1 - Mude o código do evento do Button1 para o seguinte:
Try
PictureBox1.Image = System.Drawing.Bitmap.FromFile(“a:\inverno.jpg”)
Catch
MsgBox(Err.Number & “ “ & Err.Description)
End Try
Agora a mensagem que vamos exibir é o número do erro seguido da descrição do mesmo.
2 - Execute o programa.
3 - Sem o disco no drive, clique no botão Testar Drive.
Isso exibe o número e descrição do erro.
Quando sabemos os números dos erros que podem ocorrer no nosso programa, o Visual Basic.NET permite que usemos o objeto Err junto com o Catch, assim podemos ter código de tratamento diferenciado dependendo do erro que ocorreu. Exemplo:
Try
PictureBox1.Image = System.Drawing.Bitmap.FromFile(“a:\inverno.jpg”)
Catch When Err.Number = 53
MsgBox(“Insira o disquete no drive A”)
Catch When Err.Number = 7
MsgBox(“Verifique se o arquivo é realmente uma imagem”)
Catch
MsgBox(“Não foi possivel abrir o arquivo”)
End Try
Como pode ver com as propriedades Number e Description do objeto Err você pode escrever sofisticados códigos de tratamento de erros para suas aplicações.
GERANDO SEUS PRÓPRIOS ERROS
Para testes e alguns outros usos especiais você pode gerar seus próprios erros de runtime no seu programa. Essa técnica é conhecida como “throwing” ou “raising” exceções. Para isso você usa o método Raise do objeto Err com um dos números de erro da tabela apresentada no item 6 anteriormente neste capitulo.
Exemplo:
Try
Err.Raise(61)
Catch When Err.Number = 61
MsgBox(“Erro: Disco Cheio”)
End Try
Você também pode usar o Throw para criar suas próprias exceções, como no seguinte exemplo:
Dim x As Integer = 0
Try
If x = 0 Then
Throw New Exception(“x é igual a zero”)
End If
Catch
MsgBox(“Erro: “ & Err.Description)
End Try
O exemplo acima gera uma exceção se o conteúdo da variável x for igual a 0 e o Catch trata a mesma normalmente.
PROGRAMAÇÃO DEFENSIVA
Conhecemos por programação defensiva a iniciativa do programador de escrever seu código protegendo-o de erros de runtime. Exemplo:
If System.IO.File.Exists(“a:\inverno.jpg”) Then
PictureBox1.Image = System.Drawing.Bitmap.FromFile(“a:\inverno.jpg”)
Else
MsgBox(“Não é possivel abrir o arquivo no drive A”)
End If
O código acima usa a o método File.Exists para verificar se o arquivo existe antes de tentar abri-lo.
O IF não é uma estrutura de tratamento de erros, porque não previne os erros de runtime, no entanto ele permite técnicas de validação.
A pergunta aqui é a seguinte: Quando utilizo programação defensiva preciso usar os blocos de tratamento de erros?
A resposta depende de com que freqüência você acha que o problema vai ocorrer no programa que você esta criando. Se o erro de runtime for ocorrer menos de 25% das vezes que o código for executado o tratamento de erros é a forma mais eficiente de tratar o erro. Os Try...Catch é essencial se você tem mais do que uma condição para testar também, e se você quer privar os usuários de várias questões a serem respondidas para prevenir os erros.
No entanto se a estimativa do erro ocorrer for mais de 25% da vezes, a programação defensiva é bem eficaz para diminuir a quantidade de exceções.
Mas o ideal é o uso das duas, tanto da programação defensiva como dos blocos Try...Catch.
EXIT TRY
Para finalizar suponha que o usuário esta sem o disco e tente abrir o arquivo, não sendo possivem a exceção acontece e consequentemente o erro de runtime, um bloco Try...Cath trata o erro, mas novamente o usuario clica no botão e o erro acontece novamente, é tratado, e assim sucessivamente.
Para evitar esse problema podemos criar uma variavel que armazena o numero de vezes que o Catch foi executado, chegando a um número estipulado podemos por exemplo desabilitar o botão, como no exemplo abaixo:
Dim retorno As Integer = 0
Try
PictureBox1.Image = System.Drawing.Bitmap.FromFile(“a:\inverno.jpg”)
Catch
retorno += 1
If retorno <= 2 Then
MsgBox(“Insira o disco no drive A”)
Else
MsgBox(“Recurso não disponivel”)
Button1.Enabled = False
End If
End Try
Confira todos os artigos de Certificações .NET:
Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434
Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208
Todos os direitos reservados, Júlio Battisti 2001-2024 ®
LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO
DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI