Excel VBA: проверьте, существует ли каталог – методы и примеры кода

В Excel VBA часто необходимо проверить, существует ли каталог, прежде чем выполнять какие-либо операции с файлами. В этой статье блога вы найдете несколько методов и примеров кода для эффективного выполнения этой задачи. Используя эти методы, вы можете гарантировать, что ваш код VBA корректно обрабатывает несуществующие каталоги, избегая любых потенциальных ошибок или проблем.

Методы проверки существования каталога:

Метод 1: использование функции Dir:

Function DirectoryExists(ByVal folderPath As String) As Boolean
    DirectoryExists = (Dir(folderPath, vbDirectory) <> "")
End Function

Этот метод использует функцию Dirдля проверки существования каталога. Он возвращает непустую строку, если папка существует; в противном случае возвращается пустая строка.

Метод 2: использование Scripting.FileSystemObject:

Function DirectoryExists(ByVal folderPath As String) As Boolean
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    DirectoryExists = fso.FolderExists(folderPath)
End Function

Этот метод предполагает создание Scripting.FileSystemObjectи использование метода FolderExistsдля проверки существования каталога.

Метод 3. Использование функции Dirс обработкой ошибок:

Function DirectoryExists(ByVal folderPath As String) As Boolean
    On Error Resume Next
    DirectoryExists = (GetAttr(folderPath) And vbDirectory) = vbDirectory
    On Error GoTo 0
End Function

Этот метод использует функцию GetAttrдля получения атрибутов папки. Если папка существует, побитовое сравнение с vbDirectoryприведет к True.

Метод 4. Использование функции Dirс собственным обработчиком ошибок:

Function DirectoryExists(ByVal folderPath As String) As Boolean
    Dim errNum As Long
    On Error Resume Next
    errNum = Err.Number
    DirectoryExists = (errNum = 0) And (Dir(folderPath, vbDirectory) <> "")
    On Error GoTo 0
End Function

Этот метод сочетает в себе функцию Dirсо специальным обработчиком ошибок для проверки существования каталога. Он фиксирует номер ошибки и гарантирует, что он равен нулю, прежде чем считать каталог существующим.