VBA – Copiar Archivo / Libro de Trabajo
Este tutorial demostrará cómo copiar un archivo usando VBA.
VBA le permite copiar un archivo, utilizando la función FileSystemObject.
Si quieres aprender a renombrar un archivo, puedes hacer clic en este enlace: VBA Renombrar Archivo
Copiar un archivo / libro de trabajo
Vamos a mostrar cómo copiar el archivo existente Archivo de muestra 1.xlsx en la carpeta VBA Folder. En este ejemplo, no cambiaremos el nombre del archivo, sólo lo copiaremos y sobrescribiremos. La carpeta actualmente tiene sólo este archivo:
Imagen 1. Archivo en la carpeta C:\Carpeta VBA
Aquí está el código:
Dim oFSO As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
Call oFSO.CopyFile("C:\Carpeta VBA\Ejemplo de archivo 1.xlsx", "C:\Carpeta VBA\", True)
Primero hay que crear el objeto de la clase Scripting.FileSystemObject:
Set oFSO = CreateObject("Scripting.FileSystemObject")
Luego podemos utilizar el método CopyFile:
Call oFSO.CopyFile("C:\Carpeta VBA\Ejemplo de archivo 1.xlsx", "C:\Carpeta VBA\", True)
El primer parámetro del método es la ruta de origen y el segundo es la ruta de destino. El tercer parámetro es Overwrite. Como tenemos las mismas rutas de origen y de destino, tenemos que poner Overwrite en True o False. En este ejemplo, ponemos True, lo que significa que el archivo original se sobrescribe.
Veamos ahora qué pasa si tenemos los mismos destinos, pero ponemos Overwrite en False. Sólo hay que cambiar esta línea del código
Call oFSO.CopyFile("C:\Carpeta VBA\Ejemplo de archivo 1.xlsx", "C:\Carpeta VBA\", False)
Como resultado, obtendrá un error como puede ver en la Imagen 2:
Imagen 2. Error al copiar el archivo
Copiar y renombrar un archivo
Otra opción posible al copiar un archivo es renombrarlo. Es similar a copiar un archivo, pero ahora sólo hay que establecer la ruta de destino con un nombre diferente. Aquí está el código:
Sub Copiar_renombrar_archivo()
Dim oFSO As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
Call oFSO.CopyFile("C:\Carpeta VBA\Ejemplo de archivo 1.xlsx", "C:\Carpeta VBA\Ejemplo de archivo 2.xlsx")
End Sub
Como puede ver en la última línea del código, queremos copiar el archivo «Ejemplo de archivo 1.xlsx» en la misma carpeta y nombrarlo «Ejemplo de archivo 2.xlsx«:
Call oFSO.CopyFile("C:\Carpeta VBA\Ejemplo de archivo 1.xlsx", "C:\Carpeta VBA\Ejemplo de archivo 2.xlsx")
Ahora tenemos dos archivos en la Carpeta VBA. El resultado del código está en la Imagen 3:
Imagen 3. Copiar y renombrar el archivo