¿Qué es FileSystemObject (FSO) y cómo usarlo en VBA Excel?

Tabla de contenido:

Anonim

FileSystemObject se utiliza para trabajar con carpetas y archivos conectados con el sistema. Podemos usarlo para acceder a archivos, carpetas, unidades y flujos de texto. No solo puede acceder a archivos, carpetas y archivos de texto, sino que también puede crear archivos. Estas operaciones no se limitan al disco duro del sistema sino a cualquier dispositivo conectado al archivo. Significa que puede acceder a pendrives, cd-rom o unidades de red conectadas virtualmente.

Estas son las operaciones que podemos hacer usando FileSystemObject en VBA:

Para crear, abrir, leer, escribir y eliminar archivos de texto.

Para agregar, modificar y eliminar carpetas.

Iterar a través de archivos y carpetas.

Para copiar y mover archivos o carpetas a otros lugares.

Para comprobar si un archivo o carpeta existe en la ubicación o no

¿Cómo acceder a FileSystemObject en VBA?

El objeto del sistema de archivos es parte de Microsoft Scripting Runtime Library. Para acceder a un FileSystemObject necesitamos conectarnos o agregar una referencia al Biblioteca de tiempo de ejecución de secuencias de comandos de Microsoft o Scrrun.dll.

Nota: FileSystemObject no admite la operación de archivos binarios porque Scrrun.dll admite la creación y manipulación de archivos utilizando TextStream Object.

Hay dos métodos para crear FileSystemObject en VBA:

1: Creación de un objeto FSO mediante el método CreateObject:

Usando este método, primero declaramos un tipo de objeto variable. Luego, establezca la referencia del objeto FSO a esa variable usando CreateObject:

Sub LearnFso () 'Creando la variable de objeto Dim fso As Object' Crea el FileSystemObject usando Create Object Method Set fso = CreateObject ("Scripting.FileSystemObject") Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR" ) Fin Sub 

Este método es dinámico y transferible. Significa que, si está compartiendo el código con otros sistemas, este código funcionará perfectamente bien. No importará qué versión de Microsoft Runtime Scripting tenga.

El único inconveniente es que no podrá ver el intellisense proporcionado por VBA. Tendrá que depender de sus conocimientos para utilizar todas las propiedades y métodos de FileSystemObject.

2: Creación de objetos FSO agregando una referencia a Microsoft Runtime Scripting

Puede crear directamente un FileSystemObject en VBA usando la nueva palabra clave. Para eso, tendrá que agregar una referencia a la última versión de Microsoft Scripting Runtime en su sistema.

Para agregar la referencia, vaya a la opción de referencias en el menú de herramientas. Aquí, busque la dll de Microsoft Scripting Runtime. Compruébelo y haga clic en Aceptar.

Ahora está listo para crear y utilizar el objeto FSO.

Sub LearnFso () Dim fso como nuevo FileSystemObject Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR") End Sub 

O

Sub LearnFso () Dim fso as FileSystemObject Set fso = New FileSystemObject Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR") End Sub 

Ambos funcionarán bien.

Una gran ventaja de este método es que podrá ver la inteligencia de VBA. VBA le mostrará todas las propiedades y métodos del objeto fso. También le dirá qué tipo de variables aceptará y qué tipo de valor devolverá.

Si comparte este código con otros sistemas, tendrá que decirles que agreguen una referencia a Scripting Runtime desde las herramientas, de lo contrario, obtendrán un error de compilación de que el tipo definido por el usuario no está definido. Entonces es como importar otros lenguajes de programación.

Tenga en cuenta que FSO no es una palabra clave. Puede usarlo como nombre de variable. Es solo una convención nombrar filesystemobject como fso. Es por eso que algunas personas lo confunden con una palabra clave.

Ambos métodos de creación de objetos FSO tienen sus ventajas y desventajas que mencioné al explicarlos. Utilice tan según su necesidad. En este artículo, usaré el segundo método para crear FileSystemObject.

Ahora que sabemos cómo crear un FileSystemObject en VBA, usemos este conocimiento para realizar algunas tareas significativas. Quiero decir, pasemos a los ejemplos.

Ejemplo 1: obtener toda la subcarpeta en una carpeta especificada

El primer ejemplo que veremos es el de obtener los nombres de las subcarpetas de una carpeta específica.

Sub LearnFso () 'decargando las variables que necesitaremos Dim fso As FileSystemObject' Variable para FileSystemObject Dim fdr As Folder 'Variable para la carpeta base Dim subfdr As Folder' Variable para las subcarpetas Dim fdrpath As String 'para almacenar la ruta base carpeta 'Inicializando los objetos fdrpath = "D: \ Descargas"' Declarando la carpeta Set fso = New FileSystemObject 'Creando el objeto fso Set fdr = fso.GetFolder (fdrpath)' Creando el objeto de carpeta de la carpeta dada 'bucle para obtener todos los nombre de subcarpetas en Para cada subfdr En fdr.SubFolders Debug.Print subfdr.Name Siguiente subfdr End Sub 

Cuando ejecuta el código anterior, esto es lo que obtiene.

¡Sí! Esa es mi carpeta de descargas. No se concentre en eso.

¿Cómo funcionó esto?

Entendamos en pasos:

1: Decargando las variables que necesitaremos

Dim fso As FileSystemObject 'Variable para FileSystemObject

Dim fdr As Folder 'Variable para la carpeta base

Dim subfdr As Folder 'Variable para las subcarpetas

Primero declaramos todas las variables que necesitaremos en este ejemplo. La primera variable es, por supuesto, la fso como objeto de sistema de archivo. Las dos variables fdr y subfdr son de tipo carpeta. Usaremos el objeto fso para crear un objeto de tipo de archivo en lugar de crearlo directamente. los fdrpath Esta variable de uso se usa para contener la ruta de la carpeta base de la que queremos obtener todas las subcarpetas.

2: Inicializar los objetos

fdrpath = "D: \ Descargas" 'Declarando la carpeta

Set fso = New FileSystemObject 'Creando el objeto fso

Set fdr = fso.GetFolder (fdrpath) 'Creando el objeto de carpeta de la carpeta dada

En este paso inicializamos todos los objetos que habíamos declarado excepto subfdr. Tenga en cuenta que hemos inicializado la variable de archivo fdr utilizando el método getFolder de objetos fso.

El método GetFolder () de FileSystemObject toma la ruta de una carpeta o directorio como una cadena y devuelve un objeto de tipo de archivo.

3: bucle para obtener todos los nombres de las subcarpetas en el objeto de carpeta

Para cada subfdr en fdr.SubFolders

Debug.Print subfdr.Name

Siguiente subfdr

Aquí hemos usado un bucle para cada bucle para recorrer cada subcarpeta en el objeto de archivo fdr. Usamos la propiedad SubFolders del objeto de archivo para hacer un bucle.

Usamos la propiedad name para obtener los nombres de cada subcarpeta. Y esta hecho.

Ejemplo 2: Obtener todas las rutas de archivo en una carpeta y sus subcarpetas

Para obtener todas las rutas o nombres completos de todos los archivos en una carpeta y su subcarpeta, necesitamos agregar algunas líneas más en el código del ejemplo 1.

Sub LearnFso () Dim fso As FileSystemObject Dim fdr As Folder 'Variable para la carpeta base Dim subfdr As Folder' Variable para las subcarpetas Dim fdrpath As String 'para almacenar la ruta de la carpeta base Dim fl As File' para almacenar el objeto de archivo fdrpath = "D: \ descargas" Establecer fso = New FileSystemObject Establecer fdr = fso.GetFolder (fdrpath) 'bucle para obtener todos los nombres de subcarpetas en Para cada subfdr En fdr.SubFolders Para cada fl En subfdr.Files' para recorrer cada archivo Debug.Print fl.Path 'obteniendo el nombre del archivo Next fl Next subfdr' para obtener los archivos de la carpeta principal Para cada fl En fdr.Files Debug.Print fl.Path Next fl End Sub 

El método Folder.Files () es el método que devuelve los archivos en una subcarpeta. El método File.Path () devuelve la dirección completa del archivo.

Cada uno de nosotros tiene un bucle interno para recorrer todos los archivos en la subcarpeta de la carpeta principal y su.

Para obtener los archivos de la carpeta principal usamos otro bucle.

Ejemplo 3: guarde los nombres de archivo en un archivo CSV.

En el ejemplo anterior, aprendimos cómo imprimir las rutas de archivo de carpetas específicas en la ventana inmediata. En este ejemplo, aprenderemos cómo guardar esas rutas en un archivo CSV. Para hacerlo, solo necesitamos agregar algunas líneas al código. Vea las líneas de código en negrita a continuación.

Sub LearnFso () Dim fso As FileSystemObject Dim fdr As Folder 'Variable para la carpeta base Dim subfdr As Folder' Variable para las subcarpetas Dim fdrpath As String 'para almacenar la ruta de la carpeta base Dim fl As File' para almacenar el objeto de archivo Dim fileList Como TextStream 'Un objeto de flujo de texto fdrpath = "D: \ descargas" Establecer fso = New FileSystemObject Establecer fdr = fso.GetFolder (fdrpath) Establecer fileList = fso.CreateTextFile (fdrpath & "\ Lista de archivos en esta carpeta.csv", True, False) 'bucle para obtener el nombre de todas las subcarpetas en For Each subfdr En fdr.SubFolders For Each fl En subfdr.Files' para recorrer cada archivo fileList.Write fl.Path & "," Next fl Next subfdr 'para obtener el archivos de la carpeta principal Para cada fl En fdr.Files fileList.Write fl.Path & "," Siguiente fl fileList.Close End Sub 

Aquí, hemos declarado un nuevo objeto de tipo FileStream llamado fileList

Inicializamos la variable filelist con un objeto filestream usando la siguiente línea.

Establecer fileList = fso.CreateTextFile (fdrpath & "\ Lista de archivos en esta carpeta.csv", Verdadero, Falso)

Usamos el método CreateTextFile de FSO para crear un objeto FileStream. Crea un archivo de texto. Este método acepta el nombre de un archivo con una ruta completa. La primera variable lo está haciendo. Usamos la extensión .csv para crear un archivo csv. La segunda variable se utiliza para permitir la sobrescritura. El tercer argumento es Falso para declarar que no es un archivo binario.

En los bucles, reemplazamos el método debug.print con filelist.Write para escribir cada ruta de archivo en el archivo creado.

Así que sí, chicos, así es como pueden usar FileSystemObject. El FSO se puede utilizar para muchas más cosas, que discutiremos en los próximos artículos. Si tiene alguna duda sobre este artículo de consulta relacionada con FSO, pregúnteme en la sección de comentarios a continuación.

Introducción a Excel VBA UserForms| Explicaré cómo crear un formulario en Excel, cómo usar la caja de herramientas de VBA, cómo manejar las entradas del usuario y finalmente cómo almacenar las entradas del usuario. Repasaremos estos temas usando un ejemplo y una guía paso a paso.

Variables de VBA en Excel| VBA son las siglas de Visual Basic para Aplicaciones. Es un lenguaje de programación de Microsoft. Se utiliza con aplicaciones de Microsoft Office como MSExcel, MS-Word y MS-Access, mientras que las variables de VBA son palabras clave específicas.

Alcance variable de Excel VBA| En todos los lenguajes de programación, tenemos especificadores de acceso a variables que definen desde dónde se puede acceder a una variable definida. Excel VBA no es una excepción. VBA también tiene especificadores de alcance.

Argumentos ByRef y ByVal | Cuando se pasa un argumento como argumento ByRef a una función o sub diferente, se envía la referencia de la variable real. Cualquier cambio realizado en la copia de la variable se reflejará en el argumento original.

Elimine hojas sin mensajes de confirmación usando VBA en Microsoft Excel | Dado que está eliminando hojas usando VBA, sabe lo que está haciendo. Le gustaría decirle a Excel que no muestre esta advertencia y elimine la maldita hoja.

Agregar y guardar un nuevo libro de trabajo usando VBA en Microsoft Excel 2016| En este código, primero creamos una referencia a un objeto de libro de trabajo. Y luego lo inicializamos con un nuevo objeto de libro de trabajo. El beneficio de este enfoque es que puede realizar operaciones en este nuevo libro de trabajo fácilmente. Como guardar, cerrar, borrar, etc.

Mostrar un mensaje en la barra de estado de Excel VBA| La barra de estado en Excel se puede utilizar como monitor de código. Cuando su código VBA es extenso y realiza varias tareas usando VBA, a menudo deshabilita la actualización de la pantalla para que no vea que la pantalla parpadea.

Desactive los mensajes de advertencia con VBA en Microsoft Excel 2016| Este código no solo deshabilita las alertas de VBA, sino que también aumenta la eficiencia de tiempo del código. Veamos cómo.

Articulos populares:

50 accesos directos de Excel para aumentar su productividad | Acelera tu tarea. Estos 50 accesos directos le permitirán trabajar aún más rápido en Excel.

La función BUSCARV en Excel | Esta es una de las funciones más utilizadas y populares de Excel que se utiliza para buscar valores de diferentes rangos y hojas.

CONTAR.SI en Excel 2016 | Cuente valores con condiciones usando esta asombrosa función. No necesita filtrar sus datos para contar valores específicos. La función Countif es esencial para preparar su tablero.

Cómo usar la función SUMIF en Excel | Esta es otra función esencial del tablero. Esto le ayuda a resumir valores en condiciones específicas.