sábado, 28 de junho de 2014

4. TRATAMENTO DE ERROS

Algumas literaturas não dão muita importância ou até menosprezam este assunto. Não consigo entender porque, já que no dia-a-dia é quase impossível não lançar mão deste poderoso recurso do VBA.
            Dependendo do sistema que você está desenvolvendo, erros podem acontecer recorrentemente. Por exemplo, você precisar abrir um arquivo que está em determinado diretório(“pelo menos você pensava que ele estava lá”), porém foi excluído por algum colaborador da sua empresa. Vejamos, se for apenas um arquivo, você pode tratar com a condicional “If”. Por exemplo: If MeuArq.xlsm não for encontrado lá no diretório que coloquei, “Então” “Msgbox” O arquivo não foi encontrado.
            Porém, isto só é possível em condições normais de temperatura e pressão, como vimos acima. Mas considerando o capítulo anterior, quando dissemos que o gerente de filiais precisava gerir 200 arquivos, você acredita que dá pra tratar com o “If”? De jeito maneira.
            Então, vamos tratar as possíveis ocorrências de erros quando fomos rodar o sistema. Vamos fazer algumas alterações no nosso código.




Perceba na imagem, que mudei o nome do arquivo da Filial 1  no diretório. Vou tentar com isto, provocar um erro quando a código tentar abrir o arquivo.
Veja o que vai acontecer ao tentarmos abrir o arquivo da Filial 1.


            Obviamente my friend, não conseguiremos abrir o arquivo se ele tiver com o nome diferente. Então vamos tratar isto para que não haja este retorno de erro! “Prestenção” e veja como o ficou o código!!!

Sub TotalFiliaisArvore()
Dim NomArq                              'declaramos a variável que receberá o nome do arquivo que será aberto
Set ShtArv = Sheets("Árvore")           'declaramos a planilha que receberá os dados
Lin = 2
Do While ShtArv.Cells(Lin, 1) <> ""     'agora percorremos todos os arquivos no diretório à procura do que nos interessa
    If ThisWorkbook.Sheets("Árvore").Cells(Lin, 5) = "Abrir" Then
        On Error Resume Next            'trata o erro caso não seja possível abrir o arquivo
            Workbooks.Open ShtArv.Cells(Lin, 2) 'se acharmos, vamos abri-lo. Perceba que agora estamos abrindo pelo endereço que geramos na árvore
            If Err.Number <> 0 Then     'se houver erro ao tentar abrir o arquivo, informe ao usuário
                MsgBox "O arquivo " & ShtArv.Cells(Lin, 2) & " não encontra-se no diretório especificado!", vbOKOnly + vbCritical, "ERRO AO TENTAR ABRIR O ARQUIVO"
                Exit Sub                'sai da rotina
            End If
        On Error GoTo 0
        NomArq = ActiveWorkbook.Name        'captura o nome do arquivo
       
        'Após abri-lo, precisamos pegar a informação que queremos e tranferí-la para o nosso relatório.
        With ThisWorkbook.Sheets("Árvore")
            .Cells(Lin, 4) = ActiveWorkbook.ActiveSheet.Range("B2") 'e finalmente, o valor
        End With
       
        Workbooks(NomArq).Close             'fechamos o arquivo, pois já pegamos a informação que queriamos
    End If
    Lin = Lin + 1                       'incremente a linha para abrirmos o próximo arquivo
Loop
End Sub


            Vamos analisar com detalhes a alteração que fizemos no código.

On Error Resume Next            'trata o erro caso não seja possível abrir o arquivo
     Workbooks.Open ShtArv.Cells(Lin, 2) 'se acharmos, vamos abri-lo. Perceba que agora estamos abrindo pelo endereço que geramos na árvore
     If Err.Number <> 0 Then     'se houver erro ao tentar abrir o arquivo, informe ao usuário
     MsgBox "O arquivo " & ShtArv.Cells(Lin, 2) & " não encontra-se no diretório especificado!", vbOKOnly + vbCritical, "ERRO AO TENTAR ABRIR O ARQUIVO"
         Exit Sub                'sai da rotina
     End If
On Error GoTo 0

            Usamos o “On Error Resume Next” antes de o código tentar abrir o arquivo. Isto vai impedir o erro caso o arquivo não seja encontrado no diretório.
            Logo após, verificamos com “Err.Number”, se aconteceu algum erro e caso positivo, disparamos uma mensagem para o usuário, que saberá que o arquivo não foi encontrado. Logo após, saímos da rotina com “Exit Sub” e finalizando, fechamos o bloco com “On Error GoTo 0”.
            Simples assim, essa medida dará mais profissionalismo ao código que você criou e o usuário poderá identificar com facilidade se algo fugiu o padrão(no nosso caso, o nome do arquivo que foi alterado por um colaborador da empresa, lembra?).
            É isso ai, nos vemos na próxima lição.

Para acessar o curso completo Clique aqui 

Nenhum comentário: