VBA GetFolder & GetFile (Obtener Propiedades de Archivos y Carpetas)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on agosto 11, 2022

Este tutorial demostrará cómo utilizar los métodos GetFolder y GetFile del FileSystemObject.

Obtener Propiedades de Carpetas y Archivos con VBA FileSystemObject

El método GetFolder devuelve un objeto Folder correspondiente a la carpeta de una ruta especificada y permite acceder a sus propiedades. El método GetFile hace lo mismo con el archivo especificado.

Establecer la Referencia VBA

En primer lugar, al utilizar FileSystemObjects, es posible que tengas que establecer una referencia a la biblioteca de tiempo de ejecución de scripts VB: abre el Editor de Visual Basic(ALT+F11), selecciona Herramientas > Referencias en el menú desplegable y marca la casilla de ‘Microsoft Scripting Runtime’.

Referencias VBA

FileSystemObject

En segundo lugar, debes crear el FileSystemObject:

Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")

Ahora tienes acceso a GetFolder, y a los otros métodos de FileSystemObject.

Uso del Método GetFolder

Después de especificar la carpeta a la que quieres acceder

Set fld = FSO.GetFolder("C:\Src\")

puedes copiar la carpeta:

fld.Copy "C:\NuevaCarpeta\"

mover la carpeta:

fld.Move "C:\NuevaCarpeta\"

eliminar la carpeta:

fld.Delete

o crear un nuevo archivo de texto en la carpeta:

fld.CreateTextFile "NuevoArchivodeTexto.txt"

Usando este método, se obtiene acceso a las propiedades de la carpeta como sus atributos (fld.Attributes), la fecha y hora de creación (fld.DateCreated), el último acceso (fld.DateLastAccessed), la última modificación (fld.DateLastModified), la letra de su unidad (fld.Drive), su nombre y nombre corto (fld.Name, fld.ShortName), su ruta y ruta corta (fld.Path, fld.ShortPath), su tamaño (fld.Size), su tipo (fld.Type), su carpeta padre (fld.ParentFolder), comprobar si es una carpeta raíz (fld.IsRootFolder) o puede recorrer, contar, etc. sus archivos (fld.Files) o subcarpetas (fld.SubFolders).

Poniendo todo esto junto en un procedimiento se vería así:

Sub FSOGetFolder()
    Dim FSO As New FileSystemObject
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set fld = FSO.GetFolder("C:\Src\")

    Debug.Print fld.DateCreated
    Debug.Print fld.Drive
    Debug.Print fld.Name
    Debug.Print fld.ParentFolder
    Debug.Print fld.Path
    Debug.Print fld.ShortPath
    Debug.Print fld.Size
    Debug.Print fld.Files.Count
    Debug.Print fld.Type

    For Each fold In fld.SubFolders
        Debug.Print fold.Name
    Next fold

    For Each fil In fld.Files
        Debug.Print fil.Name
    Next fil

End Sub

Tenga en cuenta que puede pulsar Ctrl + G para ver el resultado de Debug.Print en la ventana inmediata de VBA.

Método GetParentFolderName

Como alternativa a la forma mencionada anteriormente, puede acceder al nombre de la carpeta padre de una carpeta utilizando este código:

Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject") 

ParentFold= FSO.GetParentFolderName("C:\ParentTest\Test\")

ParentFold será en este caso «C:\ParentTest\».

Tenga en cuenta que este método no resolverá la ruta, ni comprueba la existencia de la ruta especificada.

Método GetSpecialFolder

Con el método GetSpecialFolder, pasando 0, 1 o 2 como argumento, puede obtener la ruta de la carpeta de Windows (con los archivos instalados por el sistema operativo Windows), la ruta de la carpeta del sistema (con las bibliotecas, las fuentes y los controladores de dispositivos) y la ruta de la carpeta temporal (la carpeta que se utiliza para almacenar archivos temporales), respectivamente.

Sub FSOGetSpecialFolder()
    Dim FSO As New FileSystemObject
    Set FSO = CreateObject("Scripting.FileSystemObject")

    Debug.Print FSO.GetSpecialFolder(0) 'El resultado puede ser: C:\Windows\System32

End Sub

Método GetFile

Puede utilizar el método GetFile de forma muy similar al método GetFolder. Después de especificar el archivo al que desea acceder

Set fil = FSO.GetFile("C:\Src\Test.xlsx")

puede copiar el archivo:

fil.Copy "C:\Dst\"

mover el archivo:

fil.Move "C:\Dst\"

borrar el archivo:

fil.Delete

o abrirlo como un objeto TextStream:

fil.OpenAsTextStream

Se puede acceder a las propiedades del archivo, como sus atributos, la fecha y hora de creación, de último acceso o de última modificación, la letra de su unidad, el nombre y el nombre corto, la ruta y la ruta corta, el tamaño, el tipo y su carpeta padre, de la misma manera que se describe en el método GetFolder.

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples