Mover e Renomear Arquivos Excel VBA

Mover e Renomear Arquivos Excel VBA

Neste artigo você aprenderá a como mover e renomear arquivos em massa utilizando Excel e VBA com um exemplo prático com código comentado e download do arquivo pronto para uso.

Como mover e renomear arquivos Excel VBA

Com VBA você pode automatizar muitas tarefas no Excel.

No nosso exemplo de solução você poderá renomear e mover arquivos em massa usando o Excel e para pastas e nomes diferentes para cada linha.

O código para mover e renomear um arquivo em Excel é o seguinte

Name "C:\Origem\Arquivo1.txt" As "C:\Destino\Renomeado1.txt"

A função Name no Excel permite que sejam movidos arquivos de uma pasta para outra, inclusive renomeando.

No entanto ela tem algumas restrições:

  1. Esta função não serve apenas para renomear arquivos, mas também pastas. Mas só pode renomear pastas se estiver dentro de uma mesma unidade.
  2. O arquivo sendo movido deve estar fechado, senão ocorrerá um erro.
  3. A função não cria pastas de destino. Para isso use este código: https://www.guiadoexcel.com.br/criar-pastas-automaticamente-com-vba/

Mover e renomear arquivos em massa no Excel

Usando o procedimento Name criei o seguinte código que realiza a movimentação e/ou renomeação de arquivos em massa:

Movimentar renomear arquivos excel vba

Public Sub lsAcaoMover()
    lsMoverArquivoRenomear 1, 2
End Sub

Public Sub lsAcaoDesfazer()
    lsMoverArquivoRenomear 2, 1
End Sub

'Os parâmetros indicam a ordem das colunas de origem e destino
Private Sub lsMoverArquivoRenomear(ByVal lColOrigem As Integer, ByVal lColDestino As Integer)
    On Error GoTo TratarErro
    
    Dim lUltimaLinhaAtiva   As Long
    Dim lRng                As Range
    Dim i                   As Long
    
    'Última linha da lista
    lUltimaLinhaAtiva = Arquivos.Cells(Arquivos.Rows.Count, 2).End(xlUp).Row
    
    'Range de dados com os arquivos na variável
    Set lRng = Arquivos.Range("B9:C" & lUltimaLinhaAtiva)
    
    'Loop para renomear os arquivos um a um
    For i = 1 To lRng.Rows.Count
        Name lRng(i, lColOrigem).Value As lRng(i, lColDestino).Value
    Next i
    
    MsgBox "Arquivo movidos e renomeados com êxito!"
    
Sair:
    Exit Sub
    
TratarErro:
    If Err.Number = 53 Then
        MsgBox "Arquivo de origem não localizado", vbCritical, "Atenção"
    Else
        If Err.Number = 58 Then
            MsgBox "O arquivo já existe", vbCritical, "Atenção"
        Else
            MsgBox "Erro: " & Err.Number & "-" & Err.Description
        End If
    End If
    
    GoTo Sair
End Sub

O código acima contém três partes.

A parte principal é lsMoverArquivoRenomear aonde você tem um procedimento que recebe dois parâmetros:

lColOrigem: 1 ou 2. Se origem for igual a um, destino tem que ser 2. Este campo indica a ordem que serão realizadas as movimentações e renomeações dos arquivos, permitindo desfazer apenas mudando de 1 para 2. O col origem é para indicar a coluna de origem.

lColDestino: 1 ou 2. Se destino for igual a um, destino tem que ser 1. Da mesma forma que a lColOrigem indica a origem o lColDestino indica a coluna de destino.

Desta forma implementamos os dois seguintes procedimentos:

lsAcaoMover: Move e renomeia os arquivos que estão na coluna Arquivo de origem para os que estão na coluna Arquivo de destino.

lsAcaoDesfazer: Desfaz o processo, movendo e renomeando os arquivos que estão na coluna de destino para o nome e caminho da coluna de origem.

Download

Realize o download do arquivo deste exemplo e da vídeo-aula acima neste botão abaixo. Basta se inscrever na nossa newsletter gratuita para o download automático.

Baixe a planilha