VBA comprueba si el archivo existe

Resuelto Josephine Bautista asked hace 11 años • 10 respuestas

Tengo este código. Se supone que debe comprobar si existe un archivo y abrirlo si existe. Funciona si el archivo existe, y si no existe, sin embargo, cada vez que dejo el cuadro de texto en blanco y hago clic en el botón enviar, falla. Lo que quiero, si el cuadro de texto está en blanco, es mostrar el mensaje de error como si el archivo no existiera.

Error de tiempo de ejecución "1004"

Dim File As String
File = TextBox1.Value
Dim DirFile As String

DirFile = "C:\Documents and Settings\Administrator\Desktop\" & File
If Dir(DirFile) = "" Then
  MsgBox "File does not exist"
Else
    Workbooks.Open Filename:=DirFile
End If
Josephine Bautista avatar May 03 '13 10:05 Josephine Bautista
Aceptado

algo como esto

Lo mejor es utilizar una variable de libro de trabajo para proporcionar un mayor control (si es necesario) del libro de trabajo abierto.

actualizado para probar que el nombre del archivo era un libro de trabajo real, lo que también hace que la verificación inicial sea redundante, aparte de enviar un mensaje al usuario de que el cuadro de texto está en blanco.

Dim strFile As String
Dim WB As Workbook
strFile = Trim(TextBox1.Value)
Dim DirFile As String
If Len(strFile) = 0 Then Exit Sub

DirFile = "C:\Documents and Settings\Administrator\Desktop\" & strFile
If Len(Dir(DirFile)) = 0 Then
  MsgBox "File does not exist"
Else
 On Error Resume Next
 Set WB = Workbooks.Open(DirFile)
 On Error GoTo 0
 If WB Is Nothing Then MsgBox DirFile & " is invalid", vbCritical
End If
brettdj avatar May 03 '2013 05:05 brettdj

Utilizo esta función para comprobar la existencia del archivo:

Function IsFile(ByVal fName As String) As Boolean
'Returns TRUE if the provided name points to an existing file.
'Returns FALSE if not existing, or if it's a folder
    On Error Resume Next
    IsFile = ((GetAttr(fName) And vbDirectory) <> vbDirectory)
End Function
iDevlop avatar Jan 30 '2015 14:01 iDevlop

Para verificar la existencia también se puede usar (funciona tanto para archivos como para carpetas) :

Not Dir(DirFile, vbDirectory) = vbNullString

El resultado es Truesi existe un archivo o un directorio.

Ejemplo:

If Not Dir("C:\Temp\test.xlsx", vbDirectory) = vbNullString Then
    MsgBox "exists"
Else
    MsgBox "does not exist"
End If
ZygD avatar Nov 18 '2015 04:11 ZygD

Una forma limpia y breve:

Public Function IsFile(s)
    IsFile = CreateObject("Scripting.FileSystemObject").FileExists(s)
End Function
Excel Hero avatar Apr 03 '2020 04:04 Excel Hero