Objetivo: Disponibilizar um arquivo Excel que realiza o backup automático de arquivos com Excel VBA.
Esta planilha foi criada pelo meu amigo Edney Nascimento, ao qual agradeço pela colaboração com o site.
O Edney já colaborou enviando mais dois arquivos:
Marcar vários filtros na tabela dinâmica automaticamente – VBA
Excel converter taxa de juros em períodos – Ano para mês, mês para dia…
Caso o leitor queira auxiliar com o crescimento da base de conhecimento da internet em Excel, além de divulgar seus trabalhos, é só enviar um comentário em qualquer página do Guia do Excel, eu leio e respondo todos os comentários que são sempre bem-vindos.
Neste artigo vamos disponibilizar uma planilha Excel que realiza o backup de arquivos, não necessariamente de Excel, copiando de uma pasta para outra.
A interface é a seguinte:
ARQUIVO: Digite aqui o nome do arquivo, inclusive a extensão do mesmo;
DIRETÓRIO DE ORIGEM: Inscreva aqui o diretório aonde o arquivo está armazenado;
DIRETÓRIO DE DESTINO: Digite a pasta aonde será salvo o arquivo, o nome do arquivo salvo será o mesmo;
STATUS: Este campo é preenchido quando o arquivo é copiado ou quando há um erro na cópia do mesmo, este tratamento de erros está em português, facilitando a correção;
TÉRMINO: Data e hora do término da cópia do arquivo, pois irá depender do tamanho do mesmo.
Ao lado da tabela estão dois botões:
GERAR BACKUP: Efetua a cópia dos arquivos que estejam com a descrição do status diferente de OK, ou seja, se houver um erro na primeira tentativa ou estiver em branco a descrição do campo status, os arquivos serão copiados;
LIMPAR: Realiza a limpeza das colunas Status e Término, para que possa ser realizado um novo backup completo dos arquivos.
Abaixo o código VBA que realiza a cópia dos arquivos e a limpeza dos mesmos, e logo abaixo o botão para o download do arquivo Excel.
Sub GerarBackup() 'Macro gravada em 11/06/2015 por Edney Nascimento On Error Resume Next 'On Error GoTo Erro_GerarBackup Dim Mensagem As String Dim NomeArquivo As String, DiretorioOrigem As String, DiretorioDestino As String Dim UltimaLinha As Long UltimaLinha = ActiveSheet.Cells(1, 1).End(xlDown).Row 'Executa o processo para cada um dos arquivos existentes For i = 2 To UltimaLinha If Range("D" & i).Value "OK" Then 'Carrega as informações do arquivo a ser copiado NomeArquivo = Cells(i, 1).Text DiretorioOrigem = Cells(i, 2).Text & "\" DiretorioDestino = Cells(i, 3).Text & "\" FileCopy DiretorioOrigem & NomeArquivo, DiretorioDestino & NomeArquivo 'Tratamento de erros para verificar se a cópia do arquivo foi executada com sucesso Select Case Err.Number Case 0: 'OK Cells(i, 4).Value = "OK" Cells(i, 5).Value = Now Case 53: 'Arquivo não encontrado Cells(i, 4).Value = "ERRO (ARQ. NAO ENCONTRADO)" Case 70: 'Arquivo aberto Cells(i, 4).Value = "ERRO (ARQUIVO ABERTO)" Case 75: 'Acesso não permitido no diretório de destino Cells(i, 4).Value = "ERRO (ACESSO NEGADO)" Case 76: 'Diretório não encontrado Cells(i, 4).Value = "ERRO (PASTA NAO ENCONTRADA)" Case Else: Mensagem = "Arquivo: " & NomeArquivo & vbCrLf & _ "Pasta Origem: " & DiretorioOrigem & vbCrLf & _ "Pasta Destino: " & DiretorioDestino & vbCrLf & _ "Erro: " & Err.Number & " " & Err.Description MsgBox Mensagem, vbExclamation Cells(i, 4).Value = "ERRO" End Select 'Zera a variável antes de iniciar a cópia do próximo arquivo Err.Number = 0 End If Next i Fim: Exit Sub Erro_GerarBackup: Mensagem = Err.Number & " " & Err.Description MsgBox Mensagem End Sub Sub lsLimpar() Dim lUltimaLinhaAtiva As Long lUltimaLinhaAtiva = Worksheets("Backup").Cells(Worksheets("Backup").Rows.Count, 1).End(xlUp).Row Range("D2:E" & lUltimaLinhaAtiva).Clear End Sub
Abraço
Marcos Rieper
Curso Excel Completo – Do Básico ao VBA
Quer aprender Excel do Básico, passando pela Avançado e chegando no VBA? Clique na imagem abaixo: