Función VBA DIR: una explicación sencilla con ejemplos

VBA tiene algunas funciones útiles que pueden llevar su automatización en Excel al siguiente nivel.

Una de esas funciones es la Función VBA DIR.

Si bien por sí solo, puede parecer una función simple que hace una cosa específica.

Pero cuando lo combina con algunos otros elementos útiles del lenguaje de codificación VBA, puede crear cosas poderosas (cubiertas en los ejemplos más adelante en este tutorial).

¿Qué hace la función VBA Dir?

Utilice la función VBA DIR cuando desee obtener el nombre del archivo o carpeta, utilizando su nombre de ruta.

Para darle un ejemplo, si tiene un archivo de Excel en una carpeta, puede usar la función VBA DIR para obtener el nombre de ese archivo de Excel (o cualquier otro tipo de archivo).

¿Qué pasa si quiero obtener los nombres de todos los archivos de Excel en la carpeta (o todos los archivos, ya sean archivos de Excel o no)?

¡Tu también puedes hacer eso!

Cuando usa la función DIR una vez, devuelve el primer nombre de archivo en una carpeta. Ahora, si también desea obtener los nombres del segundo, tercer o cuarto archivo, puede usar la función DIR nuevamente (que se explica más adelante como ejemplo).

Dir devuelve el primer nombre de archivo que coincide con el nombre de la ruta. Para obtener cualquier nombre de archivo adicional que coincida con el nombre de la ruta, llame Dir de nuevo sin argumentos. Cuando no coincidan más nombres de archivos, Dir devuelve una cadena de longitud cero (""). Cubierto en el Ejemplo 3 y 4 más adelante en este tutorial.

Sintaxis de la función VBA DIR

Dir [(nombre de ruta [, atributos])]
  • nombre de ruta: Este es un argumento opcional. Puede ser el nombre del archivo, el nombre de la carpeta o el nombre del directorio. Si no se encuentra el nombre de la ruta, la función VBA DIR devuelve una cadena de longitud cero ("")
  • atributos: Este es un argumento opcional. Puede usar este argumento para especificar algunos atributos y la función DIR devolverá los nombres de archivo basados ​​en esos atributos. Por ejemplo, si desea una lista de todos los archivos ocultos o archivos de solo lectura (junto con archivos sin atributos), debe especificarlo en este argumento.

Atributos disponibles para usar en la función VBA DIR (puede usar uno o más de estos):

Constante Valor Descripción
vbNormal 0 (Predeterminado) Especifica archivos sin atributos.
vbReadOnly 1 Especifica archivos de solo lectura además de archivos sin atributos.
vbHidden 2 Especifica archivos ocultos además de archivos sin atributos.
VbSystem 4 Especifica los archivos del sistema además de los archivos sin atributos. No disponible en Macintosh.
vbVolume 8 Especifica la etiqueta de volumen; si se especifica cualquier otro atributo, vbVolume se ignora. No disponible en Macintosh.
vbDirectory 16 Especifica directorios o carpetas además de archivos sin atributos.
vbAlias 64 El nombre de archivo especificado es un alias. Disponible solo en Macintosh.

Uso de caracteres comodín con la función DIR

Si está trabajando con Windows, también puede usar los caracteres comodín en la función DIR.

Tenga en cuenta que no puede utilizarlos cuando trabaje con VBA en Macintosh.

El uso de comodines puede resultar útil cuando:

  • Desea obtener los nombres de archivo de un tipo de archivo en particular (como .XLSX o .PPTX)
  • Cuando tiene un sufijo / prefijo específico en los nombres de archivo y desea obtener los nombres de estos archivos / carpetas / directorios. Por ejemplo, si desea los nombres de todos los archivos con el prefijo 2021-2022, puede hacerlo utilizando caracteres comodín.

Hay tres caracteres comodín en Excel:

  1. * (asterisco) - Representa cualquier número de caracteres. Por ejemplo, 2019* le daría los nombres de todos los archivos con el prefijo 2021-2022.
  2. ? (signo de interrogación) - Representa un solo carácter. Por ejemplo, 2021-2022? le daría los nombres de todos los archivos que comienzan con 2021-2022 y tienen un carácter más en el nombre (como 2021-2022A, 2021-2022B, 2021-2022C, etc.)

Nota: Hay un carácter comodín más: tilde (~). Como no se usa mucho, me he saltado su explicación. Puede leer más sobre esto aquí si está interesado.

Función VBA DIR - Ejemplos

Ahora profundicemos y veamos algunos ejemplos del uso de la función VBA DIR.

Ejemplo 1: obtener el nombre del archivo a partir de su ruta

Cuando tenga la ruta de un archivo, puede usar la función DIR para obtener el nombre del archivo.

Por ejemplo, el siguiente código devuelve el nombre del archivo y lo muestra en un cuadro de mensaje.

Sub GetFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") MsgBox FileName End Sub

El código anterior utiliza una variable "FileName" para almacenar el nombre de archivo que devuelve la función DIR. Luego usa un cuadro de mensaje para mostrar el nombre del archivo (como se muestra a continuación).

¿Y qué pasa cuando el archivo no existe?

En ese caso, la función DIR devolvería una cadena vacía.

El siguiente código usa una instrucción If Then Else para verificar si el archivo existe o no. Si el archivo no existe, muestra un cuadro de mensaje con el texto "El archivo no existe"; de lo contrario, muestra el nombre del archivo.

Sub CheckFileExistence () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") If FileName "" Entonces MsgBox FileName Else MsgBox "El archivo no existe" End If End Sub

Ejemplo 2: comprobar si un directorio existe o no (y crear si no existe)

El siguiente código comprueba si la carpeta "Prueba" existe o no.

Un cuadro de mensaje se utiliza para mostrar un mensaje en caso de que la carpeta exista o no.

Sub CheckDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) Si CheckDir "" Entonces MsgBox CheckDir & "existe" Else MsgBox "El directorio no existe "End If End Sub

Puede refinar más este código para verificar si la carpeta existe o no, y si no es así, puede usar VBA para crear esa carpeta.

A continuación se muestra el código que utiliza el Función MkDir para crear una carpeta en caso de que no exista.

Sub CreateDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) Si CheckDir "" Entonces MsgBox CheckDir & "existe una carpeta" Else MkDir PathName MsgBox "Se ha creado una carpeta con el nombre" & CheckDir End If End Sub

Ejemplo 3: obtener los nombres de todos los archivos y carpetas de un directorio

Si desea obtener una lista de todos los nombres de archivos y carpetas de un directorio, puede utilizar la función DIR.

El siguiente código enumera todos los archivos y nombres de carpetas en la carpeta Prueba (que se encuentra en la siguiente ruta: C: \ Users \ sumit \ Desktop \ Test \).

Estoy usando Debug.Print para mostrar los nombres en la ventana Inmediato. También puede usar esto para enumerar los nombres en un cuadro de mensaje o en una columna en Excel.

Sub GetAllFile & FolderNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \", vbDirectory) Do While FileName "" Debug.Print FileName FileName = Dir () Loop End Sub

El ciclo Do While en el código anterior continúa hasta que se hayan cubierto todos los archivos y carpetas en la ruta dada. Cuando no hay más archivos / carpetas para cubrir, FileName se convierte en una cadena nula y el bucle se detiene.

Ejemplo 4: obtener los nombres de todos los archivos de una carpeta

Puede usar el siguiente código para obtener los nombres de todos los archivos en una carpeta / directorio (y no los nombres de las subcarpetas).

Sub GetAllFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \") Do While FileName "" Debug.Print FileName FileName = Dir () Loop End Sub

Este código es como el código utilizado en el Ejemplo 3, con una pequeña diferencia.

En este código, no he especificado vbDirectory en la función DIR. Cuando especifique vbDirectory, le dará los nombres de todos los archivos y carpetas.

Cuando no especifica vbDirectory, la función DIR solo le dará los nombres de los archivos.

Nota: Si desea obtener los nombres de todos los archivos en la carpeta principal y las subcarpetas, no puede usar la función DIR (ya que no es recursiva). Para hacer esto, puede usar Power Query (no se necesita codificación) o usar el Objeto del sistema de archivos en VBA (con recursividad).

Ejemplo 5: obtener los nombres de todas las subcarpetas dentro de una carpeta

El siguiente código le dará los nombres de todas las subcarpetas dentro de la carpeta especificada.

Utiliza el Función GetAtr en VBA, lo que nos permite comprobar si el nombre devuelto por la función DIR es el nombre de un archivo o una carpeta / directorio.

Sub GetSubFolderNames () Dim FileName As String Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName, vbDirectory) Do While FileName "" Si GetAttr (PathName & FileName) = vbDirectory Entonces Debug.Print FileName End If FileName = Dir () Loop End Sub

Nuevamente, estoy usando Debug.Print para obtener los nombres en la ventana inmediata. Puede obtenerlos en un cuadro de mensaje o en Excel (modificando el código en consecuencia).

Ejemplo 6: obtener el primer archivo de Excel de una carpeta

Con la función DIR, puede especificar la extensión del archivo o cualquier sufijo / prefijo que desee en el nombre del archivo que se devuelve.

El siguiente código mostraría el nombre del primer archivo de Excel en la carpeta Prueba.

Sub GetFirstExcelFileName () Dim FileName As String Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName & "* .xls *") MsgBox FileName End Sub

Tenga en cuenta que he usado * .xls * (signo de asterisco en ambos lados). Esto asegurará que se verifiquen todas las versiones de los archivos de Excel (.xls, xlsx, .xlsm, .xlsb).

Ejemplo 7: obtener los nombres de todos los archivos de Excel en una carpeta

Utilice el siguiente código para obtener los nombres de todos los archivos de Excel en la carpeta Prueba.

Sub GetAllFileNames () Dim FolderName As String Dim FileName As String FolderName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (FolderName & "* .xls *") Do While FileName "" Debug.Print FileName FileName = Dir () Loop End Sub

Mientras que la función DIR devuelve el nombre del primer archivo de Excel solamente, dado que lo estamos llamando nuevamente en el ciclo, revisa todos los archivos y nos da los nombres de todos los archivos de Excel.

Espero que hayas encontrado útil este tutorial y los ejemplos.

Déjame saber tu opinión en la sección de comentarios.

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

wave wave wave wave wave