Manipular archivos con VBA Excel: Objeto Scripting.FileSystemObject

Manipular archivos dentro de la computadora es uno de los grandes desarrollos que puedes hacer en VBA. Desde copiarlos, moverlos y hasta eliminarlos o crear nuevos folders son tareas que podemos programar fácilmente.

Hoy vamos a darle una revisada rápida a los métodos más importantes de FileSystemObject dentro de VBA, para que puedas emplearlo en tus proyectos.

Creando el objeto FileSystemObject

Antes de iniciar a usarlo, es buena práctica dimensionar el objeto dentro de las variables. Usa el tipo de variable Object para definirlo adecuadamente.

Dim fso as Object 

Una vez dimensionado, es tiempo de que le des la definición adecuada. Recuerda que al crear un objeto siempre debes usar Set antes de pasarle su valor.

Set fso = CreateObject("Scripting.FileSystemObject")

Con todo listo, vamos a ver sus métodos.

Revisar si un archivo o carpeta existe.

Cuando queramos revisar si un archivo existe, podremos usar el método FileExists. Para ello, todo lo que necesitamos es obtener una cadena de texto que sea igual a la ruta de acceso del archivo. El resultado será un valor booleano True o False que podemos usar en un IF por ejemplo.

Sub fileScrapting()
' Dimension de variables
Dim fso as Object, pathFile as String

' Valor inicial de las variables
Set fso = CreateObject("Scripting.FileSystemObject")
pathFile = “D:\aplan\Documents\libro_ejercicio_1.xlsx”

'Revisamos si el archivo especificado se encuentra en la ruta de acceso.
If fso.FileExists(pathFile) Then
    Msgbox “Si existe”: Exit Sub
Else
    Msgbox “Hay que crear el archivo”
End if

End Sub

En el caso de las carpetas, el método cambia a FolderExists. Con la misma lógica de arriba podríamos conseguir saber si existe (TRUE) o no (FALSE)

Sub fileScrapting()
' Dimension de variables
Dim fso as Object, pathFolder as String

' Valor inicial de las variables
Set fso = CreateObject("Scripting.FileSystemObject")
pathFolder = “D:\aplan\Documents”

'Revisamos si la carpeta especificada se encuentra en la ruta de acceso.
If fso.FolderExists(pathFolder) Then
    Msgbox “Si existe”: Exit Sub
Else
    Msgbox “Hay que crear la carpeta”
End if

End Sub

Crear una carpeta en la ruta especificada.

Ahora que ya revisamos que no existe la carpeta, podemos crearla usando el método CreateFolder. Al igual que antes, requerimos pasar un valor que represente la ruta a crear. Hay que recalcar que, si la carpeta ya existe, el método causara error, por lo que es importante revisar antes.

Sub fileScrapting()
' Dimension de variables
Dim fso as Object, pathFolder as String

' Valor inicial de las variables
Set fso = CreateObject("Scripting.FileSystemObject")
pathFolder = “D:\aplan\Documents\Curso_Macros”

'Revisamos si la carpeta especificada se encuentra en la ruta de acceso.
If fso.FolderExists(pathFolder) Then
    Msgbox “Si existe”: Exit Sub
Else
    Msgbox “Hay que crear la carpeta”
    fso.CreateFolder(pathFolder) '<-------- Aqui creamos la carpeta
End if

End Sub

Para generar archivos de Excel, este objeto no es el adecuado. Lo mejor seria recurrir al objeto Workbooks.

Mover o Copia un archivo a otra carpeta

Siguiendo con el procedimiento, ahora podríamos mandar un archivo de esa carpeta a otro lado con el método CopyFile. A diferencia de los anteriores, necesitas tener la ruta de origen y la de destino para mover los archivos, por lo que es conveniente tenerla en una variable.

Sub fileScrapting()
' Dimension de variables
Dim fso as Object, pathFolder as String
, pathOrigin as String

' Valor inicial de las variables
Set fso = CreateObject("Scripting.FileSystemObject")
pathFolder = “D:\aplan\Documents\Curso_Macros”
pathOrigin = “D:\aplan\Documents\libro_ejercicio_1.xlsx”

'Revisamos si la carpeta especificada se encuentra en la ruta de acceso.
If fso.FolderExists(pathFolder) Then
    Msgbox “Si existe”
    fso.CopyFile pathOrigin, pathFolder & Application.PathSeparator
 '<-------- de la carpeta origen, a la carpeta destino como copia
Exit Sub
Else
    Msgbox “Hay que crear la carpeta”
    fso.CreateFolder(pathFolder)
      '<-------- Aqui creamos la carpeta
    fso.CopyFile pathOrigin, pathFolder & Application.PathSeparator '<-------- de la carpeta origen, a la carpeta destino como copia
End if

End Sub

Si lo que buscas es moverlo, utiliza en su lugar MoveFile.

Sub fileScrapting()
' Dimension de variables
Dim fso as Object, pathFolder as String
, pathOrigin as String

' Valor inicial de las variables
Set fso = CreateObject("Scripting.FileSystemObject")
pathFolder = “D:\aplan\Documents\Curso_Macros”
pathOrigin = “D:\aplan\Documents\libro_ejercicio_1.xlsx”

'Revisamos si la carpeta especificada se encuentra en la ruta de acceso.
If fso.FolderExists(pathFolder) Then
    Msgbox “Si existe”
    fso.MoveFile pathOrigin, pathFolder & Application.PathSeparator
 '<-------- de la carpeta origen, a la carpeta destino como copia
Exit Sub
Else
    Msgbox “Hay que crear la carpeta”
    fso.CreateFolder(pathFolder)
      '<-------- Aqui creamos la carpeta
    fso.MoveFile pathOrigin, pathFolder & Application.PathSeparator '<-------- de la carpeta origen, a la carpeta destino como copia
End if

End Sub

Cabe destacar que estos procedimientos permiten el uso de comodines en el nombre del archivo. Por ejemplo, si quisieras mover todos los archivos con terminación .xlsx hazlo cambiando el texto de la variable pathOrigin por un *:

pathOrigin = “D:\aplan\Documents\*.xlsx”

O tal ves todos los que inician con una cadena específica, pero varían en el texto intermedio usa ?:

pathOrigin = “D:\aplan\Documents\libro_ejercicio_?.xlsx”

Eliminar archivos o carpetas.

Por último, los archivos pueden ser también eliminados de la carpeta de ser necesarios. Simplemente usa DeleteFile o DeleteFolder. Mismo caso que las anteriores, hay que tener el texto de la ruta a eliminar.

Sub fileScrapting()

' Dimension de variables
Dim fso as Object, pathFolder as String
, pathOrigin as String

' Valor inicial de las variables
Set fso = CreateObject("Scripting.FileSystemObject")
pathFolder = “D:\aplan\Documents\Curso_Macros”
pathOrigin = “D:\aplan\Documents\libro_ejercicio_1.xlsx”

'Revisamos si la carpeta especificada se encuentra en la ruta de acceso.
If fso.FolderExists(pathFolder) Then
    Msgbox “Si existe”
    fso.CopyFile pathOrigin, pathFolder & Application.PathSeparator '<-------- de la carpeta origen, a la carpeta destino como copia
Else
    Msgbox “Hay que crear la carpeta”
    fso.CreateFolder(pathFolder) '<-------- Aqui creamos la carpeta
    fso.MoveFile pathOrigin, pathFolder & Application.PathSeparator '<-------- de la carpeta origen, a la carpeta destino como copia
End if

If Msgbox(“Presione Si para eliminar toda la carpeta, o no para eliminar solo el archivo”, vbYesNo) = vbYes Then
    fso.DeleteFolder pathFolder
Else
    fso.DeleteFile pathFolder & Application.PathSeparator & “libro_ejercicio_1.xlsx”
End if
End Sub
manipular archivos vba

Como puedes ver, manipular archivos en VBA desde Excel es muy fácil, considerando que todos los paths los puedes obtener con DialogPicker.

Cualquier duda nos leemos abajo.

Manipular archivos con VBA Excel: Objeto Scripting.FileSystemObject
Scroll hacia arriba