找不到文件路径时如何退出子程序?

时间:2019-05-21 11:58:39

标签: excel vba

我一直在阅读您的论坛,试图在VBA上进行自我教育,希望您现在能为我提供解决找不到的错误的帮助。

我正在尝试在关闭时保存工作簿。该文件路径是一个映射的驱动器,但是,该文件可能被没有该驱动器访问权限的人们使用。因此,我希望在找不到文件路径时宏不执行任何操作,而直接退出文件。这是我得到运行时错误的地方。有什么建议吗?

代码:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Dim OrigName As String
    Dim FolderPath As String

    OrigName = ActiveWorkbook.FullName
    FolderPath = "\\MappedDrive\Folder1\Folder2\"

    If Dir(FolderPath, vbDirectory) <> vbNullString Then
        ActiveWorkbook.SaveAs FolderPath + ActiveWorkbook.Name
        ActiveWorkbook.SaveAs OrigName

    Else
        Exit Sub
    End If

End Sub

该代码在连接到驱动器时​​工作正常,但是一旦断开连接,我会收到以下行的错误消息:

If Dir(FolderPath, vbDirectory) <> vbNullString Then
  

消息:运行时错误52:文件名错误,我们的电话号码

如前所述,如果找不到文件路径,我希望代码中止并关闭工作簿,就像没有宏存在一样。

谢谢!

2 个答案:

答案 0 :(得分:0)

可以尝试使用错误处理:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Dim OrigName As String
    Dim FolderPath As String

    OrigName = ActiveWorkbook.FullName
    FolderPath = "\\MappedDrive\Folder1\Folder2\"
    on error goto finish
    ActiveWorkbook.SaveAs FolderPath + ActiveWorkbook.Name
    ActiveWorkbook.SaveAs OrigName
    on error goto 0
    ' continue code here if you need to do more

finish:
    ' you can add code here that will be performed if the error occurs

End Sub

答案 1 :(得分:0)

这是Dir中不存在的驱动器的预期功能

Debug.Print Dir("\\ValidDrive\ValidFolder", vbDirectory)
'Result: "ValidFolder"

Debug.Print Dir("\\ValidDrive\InValidFolder", vbDirectory)
'Result: ""

Debug.Print Dir("\\InValidDrive\InValidFolder", vbDirectory)
'Result: Runtime Error 52: Bad File Name our Number 

使用FileSystemObject或On Error来捕获这些情况。