Как выйти из sub, если filepath не найден? - PullRequest
0 голосов
/ 21 мая 2019

Я уже некоторое время пытаюсь изучать 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 голосов
/ 21 мая 2019

Это ожидаемая функциональность из 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, чтобы отловить эти случаи.

0 голосов
/ 21 мая 2019

может попытаться использовать обработку ошибок:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...