Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Determinar con VBA si un libro existe en una carpeta (directorio)

| 4 comentarios

Funcionamiento

Esta función nos permite determinar la existencia de un documento dentro de nuestro equipo. En el siguiente ejemplo se utilizará para comprobar la existencia de la ruta del archivo que definimos. Útil cuando se   manipulan documentos que ya han sido creados con anterioridad y se quiere comprobar la existencia de alguno.

Para entender mejor el funcionamiento vamos a usar los ejemplos del siguiente documento:

FuncionDir

 

Ejemplo 1:

Definimos el nombre de la función

FileExists(FPath As String) As Boolean

Luego seguimos los siguientes pasos:

Paso 1: Declarar el tipo de variable. La variable “string” se asocia a una secuencia de caracteres que puede incluir letras, números, espacios y signos.

Dim FName As String

Paso 2: Usar la función Dir para obtener el nombre del documento

FName = Dir(FPath)

Paso 3: Aplicar una condición de verdadero o falso dependiendo si existe el documento

If FName <> “” Then FileExists = True _

Else: FileExists = False

 

Entonces debe quedar así:

Function FileExists(FPath As String) As Boolean

Dim FName As String
FName = Dir(FPath)
If FName <> “” Then FileExists = True _
Else: FileExists = False
End Function

Ahora para comprobar el trabajo realizado, insertamos la función que hemos creado:

Imagen2

Imagen3

(Para mayor visualización de la imagen, hacer click en la misma)

 

Se obtiene como resultado:

Imagen9

(Para mayor visualización de la imagen, hacer click en la misma)

(En caso de no poder visualizar los resultados se recomienda descargar el documento indicado en la parte inferior del post)

Es importante hacer algunas observaciones:

 

Caso1: El elemento Dota2.exe no existe dentro de la dirección indicada, por lo que la función da como resultado FALSO.

Caso2: Existe el documento y se encuentra dentro de la dirección indicada; sin embargo, no se ha especificado su extensión por lo que al aplicar la función se obtiene FALSO como resultado.

Caso3: Existe el documento y se encuentra dentro de la dirección indicada, además se indica su extensión “.xlsm” que hace referencia a un libro de excel habilitado para macros. Dado que la dirección y la extensión son correctos, entonces la función da como resultado VERDADERO.

 

Ejemplo 2:

Ahora podemos programar una macro que aplique la función anterior:

Sub MacroFileExist()
'La función que habíamos definido
If FileExists("C:\Users\usuario 1\Documents\Bryan\Estudios\Cursos\Macros\Tarea\T2\FuncionDir.xlsm") = True Then
MsgBox "File exists."
Else
MsgBox "File does not exist."
End If
End Sub

 

Nótese que esa dirección corresponde al caso3, en el cual se obtenía VERDADERO como respuesta.

 

Ejecutamos la macro y observamos el resultado:

Imagen6

(Para mayor visualización de la imagen, hacer click en la misma)

 

"File Exist" nos indica que el archivo si existe, correspondiente al resultado VERDADERO de la función.

FuncionDir

4 comentarios

  1. Muy buena orientacion

  2. Buenas trato de usar pero me genera un error 424 alguien me puede ayudar con esto

    Sub CambiarNombres()
    Dim NombreViejo As String
    Dim NombreViejo1 As String
    Dim NombreNuevo As String
    Dim NombreNuevo1 As String
    Dim NombreRuta As String
    ruta = "C:\Aloha\pedidos\"
    nombre = Format(Now, "ddmmyyyy")
    extencion = ".pdf"
    NombreRuta = ruta & nombre & extencion
    If My.Computer.FileSystem.File.Exists(NombreRuta) Then
    For Each fichero In Range("A2:A2")
    NombreViejo = "C:\Aloha\pedidos\" & fichero.Value & ".xlsx"
    NombreViejo1 = "C:\Aloha\pedidos\" & fichero.Value & ".pdf"
    NombreNuevo = "C:\Aloha\pedidos\" & fichero.Offset(0, 1).Value & ".xlsx"
    NombreNuevo1 = "C:\Aloha\pedidos\" & fichero.Offset(0, 1).Value & ".pdf"
    Name NombreViejo As NombreNuevo
    Name NombreViejo1 As NombreNuevo1
    Next fichero
    Else
    End If
    End Sub

    • Hola, a mi me funcionó de maravilla solo tuve que cambiar las comillas dobles en la funcion para que me corriera sin error:

      Function FileExists(FPath As String) As Boolean
      Dim FName As String
      FName = Dir(FPath)
      If FName “” Then FileExists = True _
      Else: FileExists = False
      End Function

    • Sub CambiarNombres()
      Dim FName As String
      Dim NombreViejo As String
      Dim NombreViejo1 As String
      Dim NombreNuevo As String
      Dim NombreNuevo1 As String
      Dim NombreRuta As String
      ruta = “C:\Aloha\pedidos\”
      nombre = Format(Now, “ddmmyyyy”)
      extencion = “.pdf”
      NombreRuta = ruta & nombre & extencion
      FName = Dir(NombreRuta)
      If FName “” Then
      For Each fichero In Range(“A2:A2”)
      NombreViejo = “C:\Aloha\pedidos\” & fichero.Value & “.xlsx”
      NombreViejo1 = “C:\Aloha\pedidos\” & fichero.Value & “.pdf”
      NombreNuevo = “C:\Aloha\pedidos\” & fichero.Offset(0, 1).Value & “.xlsx”
      NombreNuevo1 = “C:\Aloha\pedidos\” & fichero.Offset(0, 1).Value & “.pdf”
      Name NombreViejo As NombreNuevo
      Name NombreViejo1 As NombreNuevo1
      Next fichero
      Else
      End If
      End Sub

      Esa vendria hacer la solucion

Deja una respuesta

Los campos requeridos estan marcados con *.