我有excel vba代码,可以打开不同的文件来使用它们。可能会发生错误,因为没有excel loos文件。我想用这样的错误创建一个MsgBox
,其中包含一条特定文件不存在的消息。
现在我只能
On Error GoTo ErrorHandler
ErrorHandler:
MsgBox("File is absent")
但是我无法指定哪个文件不存在。有没有办法通过错误处理程序实现它?也许通过一些额外的变量?
编辑:我通过
打开文件Workbooks.Open Filename:=...
但我很好奇如果案件是
那应该怎么做Dim fileTitle As String
filetitle=Dir()
。
答案 0 :(得分:3)
而不是通过以下方式对文件路径进行硬编码:
Workbooks.Open Filename:=...
使用变量表示文件路径/名称:
Dim fileName As String
fileName = "C:/path/to/my/file.xlsx"
然后,在尝试打开它之前检查以确保它存在:
If FileIsAccessible(fileName) Then
' Do stuff
Else
MsgBox fileName & " doesn't exist or cannot be opened"
Exit Sub
End If
使用
等自定义功能Function FileIsAccessible(path$) As Boolean
Dim FF As Long
On Error GoTo EarlyExit
FF = FreeFile
'Does file exist?
' Raises Error 53 if file not found
Open path For Input Access Read As FF
Close FF
'If file exist, is it accessible?
' Raises error 70 if file is locked/in-use
FF = FreeFile
Open path For Binary Access Write As FF
Close FF
EarlyExit:
FileIsAccessible = (Err.Number = 0)
End Function
答案 1 :(得分:2)
您仍然可以在错误处理程序中访问您的变量,因此您知道在哪个文件中发生错误:
Sub ...
Dim filename As String
On Error GoTo ErrorHandler
filename = Dir(...)
While filename>""
Set wb = Workbooks.Open(filename)
...
filename=Dir
Wend
Exit Sub
ErrorHandler:
MsgBox "Error " & Err.Number & ": " & Err.Description & " File: " & filename
End Sub
答案 2 :(得分:1)
有两种方法可以解决这个问题。首先,正如您所建议的那样(这两者中也更容易),您可以创建一个变量,该变量将携带在每个文件成功加载后重新分配的文件名。如果发生故障,该名称可以传递到您的消息框中。如果你需要做的就是通过这个名字,这是更好的解决方案。
第二个选项是创建多个错误处理程序。我只推荐这个,如果您需要更多关于如何处理错误的自定义,比如想要根据缺少哪种类型的文件显示不同的消息。此选项会使您的代码变得更加混乱(因为您需要多次重新分配On Error GoTo ...
语句,但如果您需要更复杂的解决方案,则值得考虑。
答案 3 :(得分:1)
尝试一下,根据您的要求进行调整。这将为您提供处理错误处理的起点....
假设您正在尝试打开位于桌面上的文件abc.xlsx,并且如果在桌面上找不到此文件,则会触发错误处理。
不要忘记在错误处理标签之前使用Exit Sub,以便在找到文件时不执行它。
Dim wb As Workbook
Dim FilePath As String
FilePath = Environ("UserProfile") & "\Desktop\abc.xlsx"
On Error GoTo ErrorHandler
Set wb = Workbooks.Open(FilePath)
'Other stuff here if file was found and opened successfully
'
'
'
'
Exit Sub
ErrorHandler:
MsgBox Err.Number & vbNewLine & Err.Description, vbCritical, "File Not Found!"