VBA comprueba si el archivo existe
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
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
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
Para verificar la existencia también se puede usar (funciona tanto para archivos como para carpetas) :
Not Dir(DirFile, vbDirectory) = vbNullString
El resultado es True
si 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
Una forma limpia y breve:
Public Function IsFile(s)
IsFile = CreateObject("Scripting.FileSystemObject").FileExists(s)
End Function