FileSystemObject en VBA – Explicado

FileSystemObject también llamado FSO, proporciona un modelo fácil basado en objetos para acceder al sistema de archivos de un ordenador. Usted simplemente tiene que crear una instancia de FileSystemObject en VBA y entonces usted puede generar archivos, leer archivos, eliminar archivos, iterar a través de carpetas, y hacer muchas otras operaciones en el sistema de archivos de su ordenador.

El FileSystemObject está presente dentro de la Biblioteca de Tiempo de Ejecución de Scripting de Microsoft es decir, Scrrun.dll. Esta DLL soporta la creación y manipulación de archivos usando el objeto TextStream y esta es la razón por la que FSO no soporta la operación en archivos binarios.

Tabla de contenidos

Usos del Objeto Sistema de Archivos

FileSystemObject puede ser utilizado para múltiples tareas como:

  • Crear, abrir, leer, escribir y borrar archivos de texto.
  • Crear, modificar y eliminar carpetas.
  • Iterar archivos y carpetas.
  • Copiar y mover archivos o carpetas.
  • Comprobar si una ubicación (ruta de archivo) existe o no.

Acceso a FileSystemObject

El FileSystemObject comprende varias colecciones de objetos y cada una de estas colecciones de objetos contiene información sobre un aspecto específico del sistema de archivos. Estas colecciones son:

Object Description
Drive Este objeto permite obtener información sobre una unidad conectada al sistema. Por ejemplo, puede indicarte el espacio disponible en una unidad, su nombre lógico, etc. Tenga en cuenta que el objeto unidad a la que nos referimos aquí no significa necesariamente el disco duro, puede ser un CD-ROM, una unidad Flash, una memoria RAM, o incluso una unidad conectada lógicamente a través de la LAN.
Carpeta Este objeto permite crear, eliminar, mover o consultar una jerarquía de carpetas.
Archivo Este objeto permite crear, eliminar, mover o consultar un Archivo.
TextStream El objeto TextStream permite leer o escribir archivos de texto.

Así que, diagramáticamente, un FileSystemObject puede mostrarse como:

Tenga en cuenta que FSO se comunica con la mayoría de los objetos anteriores indirectamente. Sólo contiene directamente la colección de objetos para «Drives». Cada objeto «Drive» de la colección «Drives» contiene una cadena de objetos «Folder». Y cada objeto «Folder» contiene una colección «File».

Para hacerlo más significativo, digámoslo así: Un FileSystemObject contiene tres métodos principales para obtener (leer) información específica sobre Unidades, Carpetas o Archivos, estos métodos son GetDrive, GetFolder y GetFile respectivamente. Ahora digamos que necesitas encontrar el tamaño de un archivo en particular, entonces crearás una instancia del método GetFile y luego obtendrás su propiedad size .

Nota: GetDrive, GetFolder y GetFile no son los únicos métodos dentro de FSO, sólo los he usado para explicar las cosas. En la siguiente sección veremos todos los métodos contenidos dentro de FileSystemObject.

Métodos de FSO

La siguiente tabla da detalles sobre varios métodos de FileObjectSystem y las tareas que realizan:

Método Descripción
GetDrive, GetFolder y GetFile Estos métodos se utilizan para obtener información sobre Drive, Folders y Files respectivamente.
CrearCarpeta y CrearArchivo Ayuda a crear nuevas carpetas o archivos.
BorrarArchivo y BorrarCarpeta Ayuda a borrar archivos o carpetas existentes.
CopyFile y CopyFolder Estos métodos ayudan a copiar archivos o carpetas de una ubicación a otra.
MoverArchivo y MoverCarpeta Estos métodos ayudan a mover archivos o carpetas de una ubicación a otra.

Creación de un FileSystemObject en VBA: En esta sección, nos ocuparemos de dos cosas:

  • Crear una referencia de Microsoft Scripting Runtime Library i.e. Scrrun.dll
  • Crear un objeto FSO.

Creando una referencia de Microsoft Scripting Runtime Library

Para crear una referencia de Microsoft Scripting Runtime Library siga los siguientes pasos:

  • En primer lugar, abra el editor de VBA pulsando «Alt + F11».

  • A continuación, navegue hasta «Herramientas» > «Referencia» como se muestra arriba.

  • Esto abrirá una ventana de referencia. Aquí seleccione y marque la entrada «Microsoft Scripting Runtime» y haga clic en «Aceptar».
  • Ahora la referencia a Microsoft Scripting Runtime Library se ha añadido.

Crear un objeto FSO

Crear un objeto FSO es sencillo, siga los siguientes pasos para hacerlo:

  • En el editor de VBA navegue hasta «Insertar» > «Módulo».

  • Ahora en la ventana del módulo escriba «Public FSO As New FileSystemObject«.
  • Esto creará un objeto de FileSystemObject con el nombre FSO.

Después de esto, usted puede simplemente acceder a los métodos de FileSystemObject utilizando el objeto FSO.

6 Ejemplos prácticos de acceso a FileSystemObject

Ahora pasemos a algunos ejemplos prácticos de FSO:

Ejemplo 1: Usar FSO para encontrar el espacio libre total de una unidad.

A continuación el código para hacer esto:

'Crear un FileSystemObject 
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.GetDrive("C:") 'Creando el Drive
objeto Space = drv.FreeSpace
Space = Space / 1073741824 'convirtiendo bytes a GB
Space = WorksheetFunction.Round(Space, 2) 'Redondeando
MsgBox "C: tiene espacio libre = " & Space & " GB"
End Sub

Explicación: En este código primero hemos creado un objeto Drive usando el método GetDrive y luego hemos usado su propiedad FreeSpace para obtener el espacio libre.

Por último, hemos mostrado el espacio libre usando un cuadro de mensaje.

Nótese que hay dos propiedades para obtener el espacio libre de una unidad, es decir, drv.FreeSpace y drv.AvailableSpace.

Ejemplo 2: Comprobar si una carpeta existe o no. Si la carpeta no existe entonces crear esa carpeta.

A continuación el código:

'Crear un FileSystemObject 
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Introduce la ruta de la carpeta a comprobar :")
Si Len(Fldr_name) > 0
Entonces Si FSO.FolderExists(Fldr_name) = True Then
MsgBox "¡La carpeta existe!"
Else FSO.CreateFolder (Fldr_name)
MsgBox ("¡Folder Created!")
End If Else MsgBox "Wrong Input"
End If
End Sub

Explicación: En el código, hemos utilizado una función InputBox para obtener la ruta de la carpeta del usuario. Después de esto usando la declaración If junto con FolderExists el método, hemos comprobado si esa carpeta está presente o no. Si la carpeta no está presente entonces creamos esa carpeta usando el método CreateFolder .

Nota: CreateFolderel método sólo creará una sola carpeta a la vez. Por lo tanto, si usted proporciona un argumento «C:\Folder1\Folder2\Folder3» a él, entonces sólo creará la carpeta3 dentro de Folder2. Pero si la Carpeta2 no existe entonces arrojará un error de ruta no encontrada.

Ejemplo 3: Escribir un código usando FSO para copiar una carpeta de una ubicación a otra.

A continuación se muestra el código para conseguirlo:

‘Crear un FileSystemObject Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder «C:\NFuente-Carpeta», «D:\NDestino-Carpeta», True MsgBox «¡Copiado Hecho!» End Sub

Explicación: En el código, hemos utilizado el CopyFolder método de FSO, este método acepta tres argumentos:

  • Ruta de origen
  • Ruta de destino
  • Un argumento booleano para especificar Sobrescribir Existente.

Ejemplo 4: Utilizando FileSystemObject obtener el directorio Temp, la carpeta System y la carpeta Windows.

Para ello podemos utilizar el siguiente código:

'Crear un FileSystemObject 
Public FSO As New FileSystemObject
Sub GetFolderpath()
Dim Windows_Fldr As String
Dim System_Fldr As String
Dim Temp_Fldr As String
Windows_Fldr = FSO.GetSpecialFolder(0)
System_Fldr = FSO.GetSpecialFolder(1)
Temp_Fldr = FSO.GetSpecialFolder(2)
MsgBox ("Ruta de la carpeta Windows = " & Windows_Fldr & vbNewLine & _ "Ruta de la carpeta System = " & System_Fldr & vbNewLine & _ "Ruta de la carpeta Temp = " & Temp_Fldr)
End Sub

Explicación: En el código, hemos utilizado el GetSpecialFolder método de FSO, este método acepta un único argumento numérico es decir, 0-2.

  • FSO.GetSpecialFolder(0) – Busca la ruta de la Carpeta de Windows.
  • FSO.GetSpecialFolder(1) – Busca la ruta de la Carpeta del Sistema.
  • FSO.GetSpecialFolder(2) – Obtiene la ruta de la carpeta local temporal.

Ejemplo 5: Crear un archivo de texto, escribir en él algún contenido, luego leer el archivo y finalmente borrarlo.

Abajo está el código para lograr esto:

'Crear un FileSystemObject Public 
FSO As New FileSystemObject
Sub CreateFile()
Dim txtstr As TextStream
Dim FileName As String
Dim FileContent As String
Dim File As File
FileName = "C:\TestDirectory\File.txt" 'Archivo a crear
'Crear un archivo y escribir el contenido en él
FileContent = InputBox("Enter the File Content")
If Len(FileContent) > 0 Then
Set txtstr = FSO.CreateTextFile(FileName, True, True)
txtstr.Write FileContent
txtstr.Close
End If
' Leer del archivo que acabamos de crear
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.ReadAll txtstr.Close
' Finalmente Borrar el archivo
File.Delete (True)
End If
End Sub

Explicación: Este código primero crea un archivo de texto, agrega contenido a él, luego lo lee, lo muestra usando un cuadro de mensaje y, finalmente, elimina ese archivo.

Ejemplo 6: Escriba un código VBA que pueda iterar todos los archivos presentes dentro de una carpeta y también obtenga su tamaño y fecha de modificación.

El siguiente código puede realizar esta tarea:

'Crear un FileSystemObject 
Public FSO As New FileSystemObject
Sub ListFiles()
'Declarar variables
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'Especificar la ruta de la carpeta
strPath = "C:\NUsers\Aniee\NDesktop\NExcelTrick\N"
'Crear el objeto de esta carpeta
Set objFolder = FSO.GetFolder(strPath)
'Comprueba si la carpeta está vacía o no
Si objFolder.Files.Count = 0 Then
MsgBox "No se encontraron archivos...", vbExclamation
Exit Sub
End If
'Añadir los nombres de las columnas para A, B y C
Cells(1, "A").Value = "File Name"
Cells(1, "B").Value = "Size"
Cells(1, "C").Value = "Modified Date/Time"
'Find the next available row
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
'Recorrer cada archivo de la carpeta
For Each objFile In objFolder.Files
'Listar el nombre, tamaño y fecha/hora del archivo actual
Cells(NextRow, 1).Value = objFile.Name
Cells(NextRow, 2).Value = objFile.Size
Cells(NextRow, 3).Value = objFile.DateLastModified
'Find the next row NextRow = NextRow + 1
Next objFile
End Sub

Deja una respuesta

Tu dirección de correo electrónico no será publicada.