¿Cuál es FileSystemObject (FSO) y cómo utilizarlo en VBA Excel?
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. 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 archivos y carpetas.
Para copiar y mover archivos o carpetas a otros lugares.
Para comprobar si existe un archivo o carpeta 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 a la 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: Creando un objeto FSO usando 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() 'Creating the object variable Dim fso As Object 'Create the FileSystemObject using Create Object Method Set fso = CreateObject("Scripting.FileSystemObject") Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End 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ébalo y haz clic en Aceptar.
Ahora está listo para crear y utilizar el objeto FSO.
Sub LearnFso() Dim fso as new 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 para crear 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 todas las subcarpetas 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() ' decaring variables that we will need Dim fso As FileSystemObject ' Variable for the FileSystemObject Dim fdr As Folder ' Variable for the base folder Dim subfdr As Folder ' Variable for the sub folders Dim fdrpath As String 'to store path of base folder 'Intializing the objects fdrpath = "D:\Downloads" 'Declaring the folder Set fso = New FileSystemObject 'Creating the fso object Set fdr = fso.GetFolder(fdrpath) 'Creating the folder object of given folder 'loop to get all the sub folders name in For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Next subfdr End Sub
Cuando ejecuta el código anterior, esto es lo que obtiene.
¡Si! Esa es mi carpeta de descargas. No se concentre en eso.
¿Cómo funcionó esto?
Entendamos en pasos:
1: Descartando 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, el 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. La variable fdrpath * is use se usa para contener la ruta de la carpeta base de la que queremos obtener todas las subcarpetas.
2: Inicializando los objetos
fdrpath = «D: \ Downloads» _ ‘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
For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Next 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 ya está.
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 for the base folder Dim subfdr As Folder ' Variable for the sub folders Dim fdrpath As String 'to store path of base folder Dim fl As File 'to store file object fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) 'loop to get all the sub folders name in For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'to loop throgh each file Debug.Print fl.Path 'getting file name Next fl Next subfdr 'to get the files of main folder For Each fl In 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 for the base folder Dim subfdr As Folder ' Variable for the sub folders Dim fdrpath As String 'to store path of base folder Dim fl As File 'to store file object Dim fileList As TextStream 'A textstream object fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) Set fileList = fso.CreateTextFile(fdrpath & "\File List in This Folder.csv", True, False) 'loop to get all the sub folders name in For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'to loop through each file fileList.Write fl.Path & "," Next fl Next subfdr 'to get the files of main folder For Each fl In fdr.Files fileList.Write fl.Path & "," Next 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, de las que hablaremos 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.
Artículos relacionados:
link: / applications-word-outlook-in-vba-Getting-started-with-excel-vba-userforms [Empezando con Excel VBA UserForms]
| * Explicaré cómo crear un formulario en Excel, cómo usar 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.
link: / general-topics-in-vba-vba-variables-in-excel [Variables de VBA en Excel]
| * VBA significa 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.
link: / general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope]
| * 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.
enlace: / celdas-rangos-filas-y-columnas-en-vba-cuál-es-la-diferencia-entre-byref-y-byval-argumentos-vba-entrevista-pregunta [ByRef y ByVal Argumentos]
| 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.
link: / files-workbook-and-worksheets-in-vba-delete-sheets-without-confirm-prompts-using-vba-in-microsoft-excel [Eliminar 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.
link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Add And Save New Workbook Using VBA In 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, eliminar, etc `link: / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Display A Message On 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.
link: / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Desactivar mensajes de advertencia usando VBA en Microsoft Excel 2016]
| * Este código no solo deshabilita VBA alertas, sino que también aumenta la eficiencia del tiempo del código. Veamos cómo.
Artículos populares:
link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-incrementa-your-productividad [50 accesos directos de Excel para aumentar su productividad]
| Acelera tu tarea. Estos 50 atajos le permitirán trabajar aún más rápido en Excel.
link: / fórmulas-y-funciones-introducción-de-vlookup-function [La función VLOOKUP 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. enlace: / tips-countif-in-microsoft-excel [COUNTIF 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.
link: / excel-formula-and-function-excel-sumif-function [Cómo utilizar la función SUMIF en Excel]
| Esta es otra función esencial del tablero. Esto le ayuda a resumir valores en condiciones específicas.