Usando FileSystemObject en Excel VBA

Usando FileSystemObject (FSO) en Excel VBA

FileSystemObject (FSO) le da acceso a una amplia gama de funciones para acceder al sistema de archivos de su computadora. Con este objeto, puede acceder fácilmente a archivos, carpetas y unidades, y también leer y escribir en archivos.

Muchas de las funciones de FSO podrían ser escritas por usted en VBA tradicional, pero requerirían más codificación y serían más difíciles de mantener y comprender para un desarrollador entrante. El FSO es una API (Interfaz de programación de aplicaciones) probada y probada y es más confiable que su propio código. Es fácil de usar y está listo y disponible.

El FSO funciona según los estándares y configuraciones internacionales que tiene en su computadora. Si está distribuyendo su aplicación de Excel a nivel mundial, el uso de FSO se encargará de cualquier diferencia en la configuración entre países, lo que su propio código tendría problemas para hacer.

El FSO le permitirá hacer casi todo en código VBA que podría hacer en el Explorador de archivos de Windows. Le brinda acceso completo al sistema de archivos de Windows.

Creando un FileSystemObject

FileSytemObject no es parte de Excel VBA. Puede usar el FSO creando un objeto (enlace tardío) en VBA:

123 Sub CreateFSO ()Establecer MyFSO = CreateObject ("Scripting.FileSystemObject")End Sub

Alternativamente, puede agregar una referencia en VBA para la biblioteca FSO. Esto se llama enlace temprano y es más rápido que el enlace tardío, ya que no es necesario crear el objeto cuando se ejecuta el código.

Para agregar una referencia, debe presionar Alt-F11 para ingresar al Editor de Visual Basic (VBE) y luego usar "Herramientas | Referencias" en el menú VBE. Esto mostrará una ventana emergente para que seleccione la referencia relevante (ver más abajo).

Desplácese hacia abajo en la lista de referencias disponibles hasta que vea "Microsoft Scripting Runtime". Marque la casilla y haga clic en Aceptar, y la biblioteca ahora es parte de su aplicación.

La ubicación del archivo de la biblioteca DLL es C: \ Windows \ SysWOW64 \ scrrun.dll

Si está distribuyendo su aplicación a otros colegas o ubicaciones, es esencial que tengan este archivo en la ubicación correcta en su computadora, de lo contrario su código generará un error.

Vale la pena poner una trampa de error en el evento "WorkbookOpen" usando el comando Dir para verificar que el archivo existe. Si está ausente, envíe un mensaje de advertencia y cierre el archivo de Excel.

Una vez que se ha agregado la referencia, puede usar el siguiente código para crear el FSO:

123 Prueba secundaria FSO ()Atenuar MyFSO como nuevo FileSystemObjectEnd Sub

Todos los ejemplos de este artículo utilizarán esta metodología para crear el FSO.

El FSO tiene muchos métodos y propiedades disponibles. Estos se dividen aquí en secciones de acuerdo con lo que pueden hacer.

Uso de los métodos "existentes"

Puede utilizar un método FSO para comprobar si existe una unidad, una carpeta o un archivo. Estos métodos son fáciles de usar y solo requieren un parámetro.

123456 Sub CheckExistance ()Atenuar MyFSO como nuevo FileSystemObjectMsgBox MyFSO.DriveExists ("C:")MsgBox MyFSO.FolderExists ("C: \ temp \")MsgBox MyFSO.FileExists ("C: \ temp \ testfile.txt")End Sub

Todas estas declaraciones devolverán "Verdadero" asumiendo que su computadora tiene una unidad C :, una carpeta llamada "Temp" y un archivo en la carpeta Temp llamado "testfile.txt"

Las cadenas de texto de los parámetros no distinguen entre mayúsculas y minúsculas. No puede utilizar comodines en ninguno de estos métodos.

Tampoco puede utilizar URL (localizadores uniformes de recursos) para describir la ubicación de una carpeta o archivo. El FSO funciona exclusivamente en el sistema operativo Windows y el sistema de archivos correspondiente. Para una ubicación de servidor externo, primero debe asignar una unidad a este y luego usar la ruta de la unidad.

Uso de los métodos "Get"

El FSO tiene numerosos métodos para obtener información sobre el archivo y la ruta, ya sea dividiendo la ruta y el archivo u obteniendo información del archivo o carpeta, como la fecha de creación o la fecha de modificación.

GetAbsolutePathname

Esto proporcionará una ruta completa desde la raíz de la unidad especificada.

La sintaxis es:

GetAbsolutePathName (Pathpec)

12345 Sub AbsolutePath ()Atenuar MyFSO como nuevo FileSystemObject, Pth como cadenaPth = "c:…"MsgBox MyFSO.GetAbsolutePathName (Pth)End Sub

Esto devolverá una cadena "C: \ Users \ Richard \ Documents". Esto se debe a que la ruta se ha especificado como C: seguida de tres puntos. Cada punto significa un siguiente nivel dentro de la estructura de carpetas.

GetBaseName

Esto devuelve el nombre de un archivo o carpeta especificados.

La sintaxis es:

GetBaseName(sendero)

12345 Sub BaseName ()Atenuar MyFSO como nuevo FileSystemObject, Pth como cadenaPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetBaseName (Pth)End Sub

Este código devolverá "archivo de prueba". El método devuelve la última sección del nombre de la ruta. Si es un archivo, entonces no devuelve el sufijo del archivo.

Si no se puede encontrar la ruta, se devolverá una cadena en blanco.

GetDrive

Esto le permite utilizar código para acceder a la información de la unidad, según la letra de unidad especificada.

La sintaxis es:

GetDrive (drivepec)

123456 Sub DriveInfo ()Atenuar MyFSO como nuevo FileSystemObject, Pth como cadena, Dr como unidadPth = "C:"Establecer Dr = MyFSO.GetDrive (Pth)MsgBox Dr.FreeSpaceEnd Sub

Este método devuelve un objeto de unidad basado en la unidad especificada. Puede utilizar este objeto para acceder a información sobre la unidad, como el espacio libre disponible.

¿Cansado de buscar ejemplos de código VBA? ¡Prueba AutoMacro!

GetDriveName

Este método separará el nombre de la unidad de una cadena de ruta / nombre de archivo.

La sintaxis es:

GetDriveName (sendero)

12345 Sub DriveName ()Atenuar MyFSO como nuevo FileSystemObject, Pth como cadenaPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetDriveName (Pth)End Sub

Esto devolverá "C:"

GetExtensionName

Esto devolverá el sufijo del archivo en la ruta especificada.

La sintaxis es:

GetExtensionName (sendero)

12345 Sub ExtensionName ()Atenuar MyFSO como nuevo FileSystemObject, Pth como cadenaPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetExtensionName (Pth)End Sub

Esto devolverá "txt".

Si no se especifica ningún archivo, se devolverá una cadena vacía.

Obtener el archivo

Este método devuelve un objeto de archivo, que contiene información diversa sobre el archivo en sí.

La sintaxis es:

Obtener el archivo (especificaciónarchivo)

123456 Sub FileInfo ()Atenuar MyFSO como nuevo FileSystemObject, Pth como cadena, Fn como archivoPth = "C: \ temp \ testfile.txt"Establecer Fn = MyFSO.GetFile (Pth)MsgBox Fn.DateCreatedEnd Sub

Esto devolverá la fecha y hora en que se creó el archivo especificado. Si no se especifica ningún archivo o el archivo no existe, obtendrá un error de "archivo no encontrado".

12345 Sub nombre de archivo ()Atenuar MyFSO como nuevo FileSystemObject, Pth como cadenaPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetFileName (Pth)End Sub

Esto devolverá "testfile.txt".

GetFolder

Esto crea un objeto de carpeta para la carpeta base en la ruta especificada. La ruta solo debe contener nombres de carpetas. No se deben incluir nombres de archivo, de lo contrario se producirá un error.

La sintaxis es:

GetFolder (folderpec)

123456 Sub FolderInfo ()Atenuar MyFSO como nuevo FileSystemObject, Pth como cadena, Fo como carpetaPth = "C: \ temp"Establecer Fo = MyFSO.GetFolder (Pth)MsgBox Fo.DateCreatedEnd Sub

El objeto de carpeta contiene diversa información a la que se puede acceder. En este caso, devuelve la fecha en que se creó la carpeta.

También puede utilizar este método para recuperar todos los nombres de archivo dentro de una carpeta determinada:

12345678 Sub FileNames ()Atenuar MyFSO como nuevo FileSystemObject, Pth como cadena, Fo como carpeta, Fn como archivoPth = "C: \ temp"Establecer Fo = MyFSO.GetFolder (Pth)Para cada Fn en archivos fo.MsgBox Fn.NameSiguiente FnEnd Sub

Este código iterará a través de la carpeta "Temp" y mostrará cada nombre de archivo encontrado.

GetParentFolderName

Este método devolverá el nombre de la carpeta en el siguiente nivel en la jerarquía de carpetas.

La sintaxis es:

GetParentFolderName (sendero)

12345 Nombre de subcarpeta ()Atenuar MyFSO como nuevo FileSystemObject, Pth como cadena, Fo como carpetaPth = "C: \ usuarios \ richard"MsgBox MyFSO.GetParentFolderName (Pth)End Sub

Esto devolverá "Usuarios", ya que es el "padre" de la carpeta "richard".

Programación VBA | ¡Code Generator funciona para usted!

Uso de los métodos "Crear"

Con FSO puede crear una nueva carpeta y ruta y crear un archivo de texto.

Crear carpeta

Puede especificar un nuevo nombre de ruta de carpeta para crear. Un peligro de esto es que si la carpeta ya existe, se producirá un error. Puede utilizar el método "FolderExists" para asegurarse de que esto no suceda.

La sintaxis es:

Crear carpeta(nombre de la carpeta)

1234567 Sub CreateNewFolder ()Atenuar MyFSO como nuevo FileSystemObject, Pth como cadenaPth = "C: \ temp \ MyFolder"Si MyFSO.FolderExists (Pth) = False EntoncesMyFSO.CreateFolder (Pth)Terminara siEnd Sub

Este código creará una nueva carpeta llamada "MyFolder" bajo la ruta existente "C: \ temp".

CreateTextFile

Este método le permite crear un archivo de texto simple y escribir directamente en él.

La sintaxis es:

CreateTextFile (nombre del archivo, [ Sobrescribir, [ Unicode ]])

1234567 Sub CreateTextFile ()Atenuar MyFSO como nuevo FileSystemObject, Pth como cadenaPth = "C: \ temp \ Myfile.txt"Establecer Fn = MyFSO.CreateTextFile (Pth, True)Fn.Escribe "Agregar mi propio texto aquí" & vbLf & "Esta es la segunda línea"Fn.CerrarEnd Sub

Este código crea un archivo de texto llamado "Myfile.txt" en la carpeta "Temp" de la unidad "C:" y luego escribe dos líneas de texto en él.

Tenga en cuenta que un carácter de avance de línea está concatenado en la cadena que se está escribiendo.

Si la ruta en la que está escribiendo no existe, se producirá un error. Puede utilizar el método "FolderExists" para comprobar esto antes de crear el archivo.

Existe un parámetro opcional para sobrescribir el archivo existente si es necesario; puede ser Verdadero o Falso. El defecto es cierto.

Uso de los métodos "Copiar"

Puede utilizar estos métodos para copiar un archivo o una carpeta a otra ubicación.

Programación VBA | ¡Code Generator funciona para usted!

Copiar archivo

Este método copiará un archivo de una carpeta a otra. Tenga en cuenta que la copia fallará si la ubicación de destino tiene establecido el atributo de solo lectura.

La sintaxis es:

Copiar archivo fuente, destino, [ Sobrescribir ]

1234 Sub CopyFile ()Atenuar MyFSO como nuevo FileSystemObjectMyFSO.CopyFile "C: \ temp \ *. Txt", "C: \ temp \ myfolder \", VerdaderoEnd Sub

Este código hará una copia de todos los archivos de texto (txt) en "C: \ temp" en "C: \ temp \ myfolder \", sobrescribiendo el archivo cuando sea necesario. La configuración predeterminada para Sobrescribir es Verdadero.

Puede usar un comodín de asterisco (*) para los nombres de archivo, pero no puede usar un comodín de signo de interrogación (?) Para representar caracteres individuales.

CopyFolder

Puede utilizar este método para copiar una carpeta completa de una ubicación a otra.

La sintaxis es:

CopyFolder fuente, destino, [ Sobrescribir ]

1234 Sub CopyFolder ()Atenuar MyFSO como nuevo FileSystemObjectMyFSO.CopyFolder "C: \ temp \ *", "C: \ users \ richard \"End Sub

Este código copia todas las carpetas y archivos debajo de "C: \ temp" en "C: \ users \ richard". La nueva carpeta creada será "C: \ users \ richard \ myfolder" ya que "C: \ temp" tenía una carpeta llamada "myfolder".

Hay cuatro posibles resultados al utilizar este método:

  • Si el destino no existe, se copian la carpeta de origen y el contenido.
  • Si el destino ya existe, se produce un error.
  • Si el destino es una carpeta, se copiará la carpeta de origen y su contenido. Se producirá un error si Sobrescribir se establece en Falso y ya hay una copia de un archivo en el destino.
  • Si el destino se establece en solo lectura, se producirá un error si la sobrescritura se establece en falso.

Este método se detiene en el primer error que encuentra. No hay reversión de ninguna acción que se haya realizado correctamente antes de que se produzca el error.

Uso de los métodos "Move"

Estos métodos se pueden utilizar para mover archivos o carpetas a otras ubicaciones. Esto es lo mismo que cortar desde una ubicación y pegar en otra ubicación. Tenga en cuenta que si el archivo que se va a mover está abierto, el método Move fallará con un error.

MoveFile

Este método se utiliza para mover un archivo específico a otra ubicación. Se permiten comodines en el último componente de ruta de la fuente.

La sintaxis es:

MoveFile fuente, destino

1234 Sub MoveAFile ()Atenuar MyFSO como nuevo FileSystemObjectMyFSO.MoveFile "C: \ temp \ *", "C: \ temp \ myfolder"End Sub

Este código mueve todos los archivos que se encuentran en "C: \ temp" a "C: \ temp \ myfolder".

Las carpetas de origen y destino deben existir, ya que la carpeta de destino no se crea automáticamente.

Este método se detiene en el primer error que encuentra. No hay reversión de ninguna acción que se haya realizado correctamente antes de que se produzca el error.

Programación VBA | ¡Code Generator funciona para usted!

MoveFolder

Este método mueve una carpeta específica de una ubicación a otra.

La sintaxis es:

MoveFolder (fuente, destino)

1234 Sub MoveAFolder ()Atenuar MyFSO como nuevo FileSystemObjectMyFSO.MoveFolder "C: \ temp \ myfolder", "C: \ temp \ mydestination"End Sub

Este código mueve la carpeta "myfolder" y el contenido a la carpeta "mydestination". "Myfolder" se elimina de forma efectiva y se crea "mydestination", junto con el contenido de "myfolder".

Si la carpeta de destino ya existe, se produce un error.

Uso de los métodos "Eliminar"

Estos métodos se utilizan para eliminar archivos o carpetas. Deben usarse con cuidado, ya que no hay métodos para deshacer o deshacer si algo sale mal.

Borrar archivo

Esto elimina archivos individuales o un grupo de archivos usando comodines.

La sintaxis es:

Borrar archivo especificaciónarchivo, [ fuerza ]

1234 Sub DeleteFiles ()Atenuar MyFSO como nuevo FileSystemObjectMyFSO.DeleteFile "C: \ temp \ *"End Sub

Este código eliminará todos los archivos de la carpeta "C: \ temp"

El parámetro Force es opcional y se establece en True o False. Si se establece en Verdadero, se eliminarán los archivos de solo lectura. El valor predeterminado es falso.

Eliminar carpeta

Este método elimina una carpeta específica y su contenido.

La sintaxis es:

Eliminar carpeta folderpec, [ fuerza ]

1234 Sub DeleteFolders ()Atenuar MyFSO como nuevo FileSystemObjectMyFSO.DeleteFolder "C: \ temp \ MyDestination"End Sub

Este código eliminará la carpeta "MyDestination" y todos los archivos dentro de esa carpeta. La carpeta "temp" permanecerá.

El parámetro Force es opcional y se establece en True o False. Si se establece en Verdadero, se eliminarán las carpetas de solo lectura. El valor predeterminado es falso.

Se pueden utilizar comodines en el último componente de la ruta. Si no se encuentra la carpeta, se producirá un error.

Este método se detiene en el primer error que encuentra. No hay reversión de ninguna acción que se haya realizado correctamente antes de que se produzca el error.

Programación VBA | ¡Code Generator funciona para usted!

Otros métodos en el FSO

OpenAsTextStream.

Este método abre un archivo especificado como un objeto Text Stream y permite leerlo o escribirlo. La ventaja de este método es que puede abrir cualquier tipo de archivo y extraer el texto disponible.

La sintaxis es:

OpenAsTextStream ([ iomode, [ formato ]])

El parámetro "iomode" permite solo lectura (1), lectura / escritura (2) y anexos (8). El parámetro de lectura / escritura sobrescribe el archivo.

El parámetro "formato" se establece en -2 para el sistema predeterminado, -1 para abrir el archivo como Unicode y 0 para abrir el archivo como ASCII (Código estándar americano para el intercambio de información).

1234567891011 Sub TextStream ()Atenuar MyFSO como nuevo FileSystemObjectEstablecer f = MyFSO.GetFile ("C: \ temp \ myfile.txt")Establecer ts = f.OpenAsTextStream (2)ts.Escribe "Mi nuevo texto"ct CerrarEstablecer ts = f.OpenAsTextStream (1)s = ts.ReadLineMsgBox sct CerrarEnd Sub

Este código obtiene un archivo de texto existente y lo crea como un objeto utilizando el método "GetFile". Luego abre el flujo de texto como lectura / escritura (2) y escribe una línea de texto. Luego, el archivo se cierra y se vuelve a abrir como leído (1) y se lee una línea, que luego se muestra como un cuadro de mensaje.

Tenga en cuenta que la línea de lectura debe colocarse en una variable antes de que pueda mostrarse en un cuadro de mensaje.

Construir camino

Este método agregará un nombre de carpeta o archivo al final de una ruta de carpeta existente. Esto solo crea una cadena de texto y en realidad no crea la nueva carpeta.

La sintaxis es:

Construir camino (sendero, nombre)

12345 Sub BuildPth ()Atenuar MyFSO como nuevo FileSystemObjectnp = MyFSO.BuildPath ("C: \ temp", "ANewFolder")MsgBox npEnd Sub

Esto mostrará "C: \ temp \ ANewFolder". Sin embargo, si realmente desea utilizar esta carpeta, debe utilizar el método "CreateFolder".

OpenTextFile

Este método permite abrir y leer o escribir archivos de acuerdo con los parámetros establecidos. Funciona de forma similar al método OpenAsTextStream.

La sintaxis es:

OpenTextFile (nombre del archivo, [ iomode, [ crear, [ formato ]]])

El parámetro "iomode" permite ForReading, ForWriting y ForAppending. El parámetro ForWriting sobrescribe el archivo.

El parámetro "crear" es un valor booleano. Verdadero significa que se creará un nuevo archivo si el nombre de archivo especificado no existe. Falso significa que no se creará ningún archivo si no se encuentra el nombre del archivo. El valor predeterminado es falso.

El parámetro "formato" se puede establecer en TristateFalse, TristateMixed, TristateTrue y TristateUseDefault, dependiendo de si el archivo es ASCII o Unicode.

1234567 Sub OpenTxtFile ()Atenuar MyFSO como nuevo FileSystemObjectEstablecer ts = MyFSO.OpenTextFile ("C: \ temp \ myfile.txt", ForReading, False, TristateUseDefault)s = ts.ReadLineMsgBox sct CerrarEnd Sub

Este código leerá una línea del archivo de texto "myfile.txt".

Una ventaja que tiene el método OpenTextFile sobre OpenAsTextStreamMethod es que tiene menús desplegables para los parámetros, que son más significativos que tratar de recordar los valores numéricos apropiados para las diversas opciones de parámetros.

Programación VBA | ¡Code Generator funciona para usted!

Propiedades del FSO

Drives

Esta propiedad contiene una colección de unidades disponibles en su computadora.

1234567 Sub Drv ()Atenuar MyFSO como nuevo FileSystemObject, d como unidadEstablecer Dr = MyFSO.DrivesPara cada d en Dr.MsgBox d.DriveLetterSiguiente dEnd Sub

Este código devolverá cada letra de unidad disponible en su computadora.

Nombre

Esto devuelve el nombre de un archivo o carpeta especificados.

123456789 Sub nombreEjemplo ()Atenuar MyFSO como nuevo FileSystemObjectEstablecer f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Name & "en la unidad" & UCase (f.Drive) & vbCrLfi = i & "Created:" & f.DateCreated & vbCrLfi = i & "Último acceso:" & f.DateLastAccessed & vbCrLfi = i & "Última modificación:" & f.DateLastModifiedMsgBox iEnd Sub

Este código le dará el nombre del archivo e información sobre él usando la propiedad Drive.

Sendero

La propiedad Path separará la ruta de una especificación de archivo.

123456789 Sub PathExample ()Atenuar MyFSO como nuevo FileSystemObjectEstablecer f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Path & f.Name & "en la unidad" & UCase (f.Drive) & vbCrLfi = i & "Created:" & f.DateCreated & vbCrLfi = i & "Último acceso:" & f.DateLastAccessed & vbCrLfi = i & "Última modificación:" & f.DateLastModifiedMsgBox iEnd Sub

Este ejemplo funciona de la misma manera que el ejemplo de Nombre, excepto que ahora proporciona la ruta del archivo.

Programación VBA | ¡Code Generator funciona para usted!

Tamaño

La propiedad Tamaño dará el tamaño de una carpeta o un archivo.

12345 Sub FSize ()Atenuar MyFSO como nuevo FileSystemObjectEstablecer f = MyFSO.GetFolder ("C: \ temp \")MsgBox f. TamañoEnd Sub

Este código anterior devolverá el tamaño de la carpeta "C: \ temp \".

12345 Sub FSize ()Atenuar MyFSO como nuevo FileSystemObjectEstablecer f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f. TamañoEnd Sub

Este código anterior devolverá el tamaño del archivo "myfile.txt".

Escribe

La propiedad de tipo devolverá el texto del tipo de archivo o carpeta.

12345 Sub FType ()Atenuar MyFSO como nuevo FileSystemObjectEstablecer f = MyFSO.GetFolder ("C: \ temp \")MsgBox f.TypeEnd Sub

Este código anterior devolverá el texto "Carpeta de archivos".

12345 Sub FType ()Atenuar MyFSO como nuevo FileSystemObjectEstablecer f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f.TypeEnd Sub

Este código anterior devolverá el texto "Documento de texto".

Tenga en cuenta el uso de "GetFolder" y "GetFile" en cada ejemplo.

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave