Страницы: 1
RSS
Как проверить наличие директории не сбивая функцию Dir?
 
Здравствуйте!

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

Как проверить наличие директории, не нарушив последовательность выбора файлов из директории?

Вот код всей процедуры:
Код
Sub arrange_in_folders()
    Dim File, Path, FileContent, region As String
    Dim objFileSys As Object
    Dim i, j As Integer
    
    'выбираем папку с файлами-источниками информации
    With Application.FileDialog(msoFileDialogFolderPicker)
        .ButtonName = "OK"
        .Title = "Выберите папку, содержащую файлы"
        If .Show = 0 Then
            Exit Sub
        End If
        Path = .SelectedItems(1)
    End With
    
    File = Dir(PathName:=Path + "\*.xml")
    
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    
    Do Until File = "" 'пока не закончатся файлы
        FileContent = objFileSys.OpenTextFile(Path + "\" + File).ReadAll
        i = InStr(1, FileContent, "<RegionId>")
        j = InStr(1, FileContent, "</RegionId>")
        If InStr(1, FileContent, "<RegionId>") Then
            region = Mid(FileContent, i + 10, j - i - 10)
            If Dir(Path + "\" + region, vbDirectory) = "" Then MkDir Path + "\" + region
        End If
        File = Dir
    Loop

    Set File = Nothing
    Set Path = Nothing
    Set FileContent = Nothing
End Sub
Изменено: borro - 18.11.2019 15:14:57
желаю всем счастья
 
Зачем вам нужен "Dir", если вы используете "FSO" ?
 
Использовать FileSystemObject вместо Dir
Код
Function FExist(ByVal sPath As String) As Boolean
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    FExist = fso.FolderExists(sPath)
End Function

Подробнее тут
Я не волшебник, я только учусь.
 
Код
On Error Resume Next
MkDir Path + "\" + region
 
Всем спасибо! Взял вариант RAN
желаю всем счастья
Страницы: 1
Наверх