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
Sobre la configuración de referencias

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.

Usando
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

' Tu código aquí...

' Limpieza
Set fso = Nothing
Enfoque recomendado

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

Verificar
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

Copiar
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

Mover
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

Eliminar
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
La eliminación es permanente

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

Crear
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

Listar
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

Escribir
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

Leer
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 CreateObject para portabilidad
  • Usar FileExists y FolderExists para 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.

#VBA #FileSystemObject #Operaciones de archivos #Operaciones de carpetas