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
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.Image.FromFile(@"a:\inverno.jpg");
}
catch
{
MessageBox.Show("Insira o disquete no drive A");
try
{
pictureBox1.Image = pictureBox1.Image = System.Drawing.Image.FromFile(@"a:\inverno.jpg");
}
catch
{
MessageBox.Show("Falha ao abrir o arquivo");
button1.Enabled = false;
}
}
A primeira mensagem de erro pede para o usuario inserir o disque e clicar em OK, se ele o fizer o programa tenta ler o arquivo, se não for possivel emite a mensagem de Falha e desabilita o Button1.
Vamos fazer esse exemplo para você ver a diferença do que tinhamos feito até aqui.
1 – No programa que criamos no tutorial anterior, modifique o código do evento do Button1 para o seguinte.
try
{
pictureBox1.Image = System.Drawing.Image.FromFile(@"a:\inverno.jpg");
}
catch
{
MessageBox.Show("Insira o disquete no drive A");
try
{
pictureBox1.Image = pictureBox1.Image = System.Drawing.Image.FromFile(@"a:\inverno.jpg");
}
catch
{
MessageBox.Show("Falha ao abrir o arquivo");
button1.Enabled = false;
}
}
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;
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"))
{
pictureBox1.Image = System.Drawing.Image.FromFile(@"a:\inverno.jpg");
}
else
{
MessageBox.Show("Não é possivel abrir o arquivo no drive A");
}
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 aconteçe e consequentemente o erro de runtime, um bloco try...catch trata o erro, mas novamente o usuario clica no botão e o erro aconteçe denovo, é 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:
int retorno = 0;
try
{
pictureBox1.Image = System.Drawing.Image.FromFile(@"a:\inverno.jpg");
}
catch
{
retorno += 1;
if (retorno <= 2)
{
MessageBox.Show("Insira o disquete no drive A");
}
else
{
MessageBox.Show("Recurso não disponivel");
button1.Enabled = false;
}
}
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-2025 ®
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