FileSystemObject
Mientras que VBA ofrece funciones tradicionales como Dir y sentencias como Kill para operaciones de archivos y carpetas, FileSystemObject (FSO) proporciona un enfoque más potente y flexible.
Este artículo explica todo, desde los conceptos básicos hasta las aplicaciones prácticas de FileSystemObject de una manera amigable para principiantes.
¿Qué es FileSystemObject?
FileSystemObject es un objeto para acceder al sistema de archivos de Windows. Es parte de la biblioteca Microsoft Scripting Runtime y proporciona una interfaz unificada para crear, eliminar, copiar, mover y leer/escribir archivos y carpetas.
Características clave de FileSystemObject
- Orientado a objetos: Trata archivos y carpetas como objetos
- Rico en funciones: Soporta virtualmente todas las operaciones de archivos y carpetas
- Manejo de archivos de texto: Lectura y escritura simple de archivos de texto
- Manejo de errores: Proporciona información detallada de errores
- Multiplataforma: Comparte el mismo modelo de objetos con Windows Script Host
Aunque se recomienda establecer una referencia a “Microsoft Scripting Runtime” para
FileSystemObject, también puedes usarlo sin configuración de referencia usando
CreateObject("Scripting.FileSystemObject").
Uso básico de FileSystemObject
Crear una instancia
Para usar FileSystemObject, primero necesitas crear una instancia.
Usando CreateObject (Recomendado)
Este método funciona sin configuración de referencia, haciéndolo más portable entre diferentes entornos.
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' Tu código aquí...
' Limpieza
Set fso = Nothing
Se recomienda usar CreateObject a menos que tengas una razón específica para lo contrario, ya
que no requiere configuración de referencia y funciona en diferentes entornos.
Operaciones de archivos
Verificar existencia de archivo
Sub VerificarExisteArchivo()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim rutaArchivo As String
rutaArchivo = "C:\Temp\ejemplo.txt"
If fso.FileExists(rutaArchivo) Then
MsgBox "El archivo existe"
Else
MsgBox "El archivo no existe"
End If
Set fso = Nothing
End Sub
Copiar archivos
Sub CopiarArchivo()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim archivoOrigen As String
Dim archivoDestino As String
archivoOrigen = "C:\Temp\original.xlsx"
archivoDestino = "C:\Respaldo\copia.xlsx"
' Copiar archivo (True permite sobrescribir)
fso.CopyFile archivoOrigen, archivoDestino, True
MsgBox "Archivo copiado exitosamente"
Set fso = Nothing
End Sub
Mover archivos
Sub MoverArchivo()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim archivoOrigen As String
Dim archivoDestino As String
archivoOrigen = "C:\Temp\archivo.txt"
archivoDestino = "C:\Archivo\archivo.txt"
' Mover archivo
fso.MoveFile archivoOrigen, archivoDestino
MsgBox "Archivo movido exitosamente"
Set fso = Nothing
End Sub
Eliminar archivos
Sub EliminarArchivo()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim rutaArchivo As String
rutaArchivo = "C:\Temp\eliminar_este.txt"
If fso.FileExists(rutaArchivo) Then
' Eliminar archivo (True fuerza la eliminación)
fso.DeleteFile rutaArchivo, True
MsgBox "Archivo eliminado exitosamente"
Else
MsgBox "El archivo no existe"
End If
Set fso = Nothing
End Sub
Cuando eliminas un archivo con DeleteFile, se elimina permanentemente y no se mueve a la
Papelera de reciclaje. Siempre incluye confirmación antes de la ejecución.
Operaciones de carpetas
Crear carpetas
Sub CrearCarpeta()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim rutaCarpeta As String
rutaCarpeta = "C:\Temp\NuevaCarpeta"
If Not fso.FolderExists(rutaCarpeta) Then
fso.CreateFolder rutaCarpeta
MsgBox "Carpeta creada exitosamente"
Else
MsgBox "La carpeta ya existe"
End If
Set fso = Nothing
End Sub
Listar contenido de carpeta
Sub ListarContenidoCarpeta()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim rutaCarpeta As String
Dim carpeta As Object
Dim archivo As Object
Dim subcarpeta As Object
rutaCarpeta = "C:\Documentos"
If fso.FolderExists(rutaCarpeta) Then
Set carpeta = fso.GetFolder(rutaCarpeta)
' Listar archivos
Debug.Print "=== Archivos ==="
For Each archivo In carpeta.Files
Debug.Print archivo.Name & " (" & archivo.Size & " bytes)"
Next archivo
' Listar subcarpetas
Debug.Print "=== Subcarpetas ==="
For Each subcarpeta In carpeta.SubFolders
Debug.Print "[" & subcarpeta.Name & "]"
Next subcarpeta
End If
Set fso = Nothing
End Sub
Operaciones de archivos de texto
Escribir en archivos de texto
Sub EscribirArchivoTexto()
Dim fso As Object
Dim ts As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' Crear nuevo archivo (True = sobrescribir si existe)
Set ts = fso.CreateTextFile("C:\Temp\salida.txt", True)
ts.WriteLine "Línea 1: ¡Hola, Mundo!"
ts.WriteLine "Línea 2: Esto es VBA."
ts.Write "Línea 3: Sin salto de línea al final"
ts.Close
MsgBox "Archivo escrito exitosamente"
Set ts = Nothing
Set fso = Nothing
End Sub
Leer archivos de texto
Sub LeerArchivoTexto()
Dim fso As Object
Dim ts As Object
Dim contenido As String
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists("C:\Temp\entrada.txt") Then
' Abrir para lectura (1 = ForReading)
Set ts = fso.OpenTextFile("C:\Temp\entrada.txt", 1)
' Leer todo el contenido
contenido = ts.ReadAll
ts.Close
Debug.Print contenido
End If
Set ts = Nothing
Set fso = Nothing
End Sub
Resumen
FileSystemObject es una herramienta poderosa para operaciones de archivos y carpetas en VBA. Puntos clave:
- Crear instancias con
CreateObjectpara portabilidad - Usar
FileExistsyFolderExistspara verificar antes de las operaciones - Tener cuidado con las operaciones de eliminación: son permanentes
- Las operaciones de archivos de texto son simples con TextStream
- Soporta procesamiento recursivo de subcarpetas
Domina FileSystemObject para manejar eficientemente operaciones de archivos complejas en tus proyectos VBA.