Bucle a través de archivos en una carpeta usando VBA
- Bucle a través de archivos en una carpeta usando VBA
-
Utilice la función
Dir
-
Utilice el
Objeto del sistema de archivos
- La mejor solución
- Conclusión
Visual Basic for Applications es un lenguaje de programación basado en eventos diseñado para Microsoft Office. Te permite automatizar tareas y personalizar funcionalidades según tus requerimientos.
VBA es bastante poderoso y le permite al usuario hacer todo con solo unas pocas declaraciones de código.
Este artículo explica cómo recorrer archivos almacenados en una carpeta usando VBA. A continuación, se analizan en detalle dos métodos y se proporcionan fragmentos de código.
Bucle a través de archivos en una carpeta usando VBA
VBA permite a los usuarios recorrer los archivos almacenados en un directorio específico y obtener sus nombres, marcas de tiempo, extensiones, etc. Puede realizar cualquier acción accediendo al directorio, por ejemplo, creando nuevos archivos o modificando los antiguos.
En este artículo se han mencionado dos soluciones, cada una con un tiempo de acceso diferente. VBA permite a los usuarios recorrer archivos en una carpeta usando la función Dir
y creando un Objeto de sistema de archivos
.
Las diferentes soluciones se analizan a continuación.
Utilice la función Dir
El siguiente fragmento de código permite al usuario recorrer archivos en una carpeta usando la función Dir
. La función Dir
se conoce como función de directorio.
Es una función VBA incorporada que toma la ruta del archivo como parámetro y devuelve el nombre del archivo.
Si la ruta representa una carpeta, la función Dir
devuelve el nombre del primer archivo almacenado en la ruta. El siguiente fragmento de código representa cómo la función Dir
ayuda a recorrer los archivos en una carpeta.
Sub example()
Dim fileName As Variant
fileName = Dir("C:\User\testfolder\")
Do While Len(fileName) > 0
' Insert any action that must be performed on each file.
Debug.Print fileName
' Prints file name to the immediate window
fileName = Dir
' Set the file name to the next file name
Loop
End Sub
Nota: Este es un fragmento de código y no el código completo. Puede editarlo según sus requisitos.
La función Dir
proporciona una solución rápida y eficaz. Además, también tiene un tiempo de acceso rápido.
Si solo desea recorrer archivos específicos en la carpeta, puede aplicar una condición de prueba
con la función Dir
. La sintaxis para usar una condición de prueba
con la función Dir
se muestra a continuación.
Dir("C:\User\testfolder\*test*")
La *prueba*
puede ser cualquier condición que desee aplicar a los archivos. Por ejemplo:
- Si solo desea recorrer los archivos de texto en la carpeta, use el siguiente comando:
Dir("C:\User\testfolder\*.txt")
. - Si solo desea recorrer los archivos que contienen
"Finanzas"
en sus nombres, use el siguiente comando:Dir("C:\User\testfolder\*Finance*")
.
Nota: Los argumentos de la función
Dir
también se pueden cambiar para devolver diferentes tipos de archivos, como ocultos, del sistema, etc.
Utilice el Objeto del sistema de archivos
La segunda solución crea un Objeto del sistema de archivos
(FSO) para recorrer los archivos almacenados en la carpeta. Se utilizan diferentes funcionalidades del FSO para recorrer los archivos almacenados en la carpeta.
A continuación se comparte un fragmento de código.
Sub example()
Dim Obj As Object, Source As Object, file As Variant
Set Obj = CreateObject("Scripting.FileSystemObject")
Set Source = Obj.GetFolder("C:\User\testfolder\")
For Each file In Source.Files
If InStr(file.Name, ".txt") > 0 Then
Debug.Print file.Name
End If
Next file
End Sub
El fragmento de código establece Fuente
con la ruta de la carpeta específica. A continuación, se utiliza un bucle Para cada uno
para recorrer todos los archivos de la carpeta.
Si no desea recorrer todos los archivos de la carpeta, puede usar el comando InStr(file.name, "test") > 0
y especificar el texto para filtrar los archivos. Si la condición devuelve “true”, las acciones que deben realizarse en esos archivos específicos se mencionarán dentro de la declaración if
.
Sin embargo, hay un problema con el fragmento de código mencionado anteriormente.
La función del código archivo.nombre
tiene un tiempo de ejecución lento. Se requieren unos segundos para devolver la respuesta al usuario.
Si no está utilizando una prueba para filtrar los archivos específicos, no necesitará la función file.name
. En ese caso, funcionaría idealmente.
Puede recorrer fácil y rápidamente todos los archivos de la carpeta a través del fragmento de código mencionado.
Enlace anticipado de FSO frente a enlace tardío
Un Objeto del sistema de archivos
se puede declarar de dos maneras: vinculación anticipada y vinculación tardía.
-
Enlace anticipado
El enlace temprano es cuando los enlaces de referencia, las bibliotecas, se verifican o agregan explícitamente en VBA. Las bibliotecas se pueden agregar desde
Herramientas
>Referencias
en VBA.La ejecución fallará si el módulo no está disponible en su computadora. El enlace anticipado es muy útil para el proceso de desarrollo y depuración.
Ofrece sugerencias del editor Intellisense para métodos de objeto, propiedades y constantes con nombre. Además, es más rápido que el enlace en tiempo de ejecución.
En el enlace temprano, verifique los módulos/bibliotecas que necesita y declare los objetos de la siguiente manera.
Dim FSO As FileSystemObject Set FSO = New FileSystemObject
Otro método para declarar objetos en enlace anticipado es el siguiente:
Dim FSO As New FileSystemObject
-
Enlace tardío
Las bibliotecas externas no están vinculadas en enlace en tiempo de ejecución. Es independiente de los enlaces de referencia, lo que lo hace ideal para la portabilidad y compatibilidad entre máquinas.
No ofrece el editor Intellisense, por lo que las constantes específicas del objeto deben declararse explícitamente y proporcionarse por su valor.
La siguiente sintaxis se puede utilizar para declarar un objeto en enlace en tiempo de ejecución.
Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject")
La mejor solución
La solución con la función Dir
funciona mejor que la solución que crea objetos para obtener archivos de la carpeta. La capacidad de prueba con la función Dir
funciona de manera más eficiente que la solución que crea objetos para acceder a los archivos.
Puede crear macros que almacenen y ejecuten la funcionalidad requerida. Puede ejecutar la misma funcionalidad en diferentes carpetas con la ayuda de macros en Microsoft Office.
Conclusión
Las aplicaciones de Microsoft Office ofrecen numerosas funciones para sus usuarios. Con la adición de la programación en el lenguaje VBA, ha sido más fácil para los usuarios realizar tareas automatizadas con solo unas pocas líneas de código.
Hay varias soluciones para recorrer los archivos en una carpeta específica, así que sigue explorando.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub