VBA Comprobar si existe una carpeta/directorio (FolderExists)

VBA - Visual Basic for Application

VBA es muy adecuado para librarse de ciertas tareas molestas en Microsoft Office y limitar la propia productividad a lo esencial.

Si escribe mucho código VBA, seguramente necesitará en algún momento una función para comprobar si existe una ruta de carpeta o directorio. De hecho, es parte de las buenas prácticas de programación realizar dicha comprobación. Porque si quiere guardar algo utilizando código VBA, por ejemplo un correo electrónico o sus adjuntos, obtendrá un mensaje de excepción si el directorio seleccionado no existe.

Comprobar si la carpeta existe se hace fácilmente con esta función:

CreateObject("Scripting.FileSystemObject").FolderExists(strPath)

La función CreateObject devuelve un objeto ActiveX. El objeto ActiceX, en términos generales, hace que otras funciones a nivel de sistema operativo estén disponibles en Windows. Como aquí se pasa el parámetro “Scripting.FileSystemObject”, las funciones archivo y directorio quedan disponibles en este caso. En nuestro caso de uso necesitamos la función FolderExists. Como parámetro de transferencia se especifica una cadena (strPath) con la ruta completa del directorio. La función devuelve entonces Verdadero o Falso, dependiendo de si la carpeta existe.

Ejemplo de código CarpetaExiste

En este ejemplo de código trabajamos con variables para la ruta de la carpeta (strPath) y el valor booleano de retorno de la función (isDir), ya que la ruta del directorio estará presente a menudo como variable de cadena, por ejemplo como parámetro pasado de una función. La función Debug.Print escribe entonces la salida en la ventana directa.

Dim strPath As String.
Dim isDir Como Booleano.
strPath = "c:\Usuarios\NMiNombreDeUsuario\Desktop\N"
isDir = CreateObject("Scripting.FileSystemObject").FolderExists(strPath)

Debug.Print isDir

En lugar de Debug.Print, por supuesto se procesará el resultado isDir y se comprobará con una sentencia If si la comprobación del directorio es True o False. Si el directorio aún no existe, podría crear el directorio con el comando MkDir(…) en otra sentencia.

Dim strPath As String.
Dim isDir Como Booleano.
strPath = "c:\Usuarios\NMiNombreDeUsuario\Desktop\N"
isDir = CreateObject("Scripting.FileSystemObject").FolderExists(strPath)

If isDir = True Then.
  'Hacer algo, por ejemplo guardar un archivo bajo el directorio.
  Debug.Print "El directorio existe".
Else
  'Hacer algo si la carpeta no existe.
  Debug.Print "La carpeta no existe"
End If

Para los perezosos de la escritura, he aquí otra variante corta:

If CreateObject("Scripting.FileSystemObject").FolderExists("c:\Users\MyUserName\Desktop\") Then.
  Hacer algo, por ejemplo guardar un archivo en el directorio.
  Debug.Print "El directorio existe".
Else
  'Hacer algo si la carpeta no existe.
  Debug.Print "La carpeta no existe"
End If

Ejemplo de código Dir

Otro método, que no me parece tan elegante, pero que funciona igual de bien, es el que se muestra en el siguiente ejemplo de código. Aquí se utiliza la función Dir(…), que devuelve una cadena vacía si la carpeta no existe.

 'Definir cadena para ruta de carpeta.
  Dim strFolderPath As String.
  strFolderPath = "c:\Users\MiNombreDeUsuario\Desktop\1\"
  ' Comprueba si la carpeta ya existe.
  If Dir(strFolderPath, vbDirectory) = "" Entonces.
    ' La carpeta aún no existe.
    Debug.Print "La carpeta no existe".
  Else
    ' La carpeta existe.
    Debug.Print "¡La carpeta existe!".
  End If

Como parámetros hay que pasar la ruta del directorio (strFolderPath) a la función Dir así como el atributo vbDirectory.

Conclusión

Como ves, es relativamente fácil en VBA comprobar si una carpeta existe. Y deberías hacer uso frecuente de ella, especialmente si no se sabe con certeza si el directorio ya ha sido creado o la ruta de la carpeta ha sido especificada por información del usuario.

Bestseller No. 1
Bestseller No. 2

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *