Доброго времени суток, дамы и господа. При использовании вложенного цикла Do Loop в Do Loop выдает ошибку
Run-time error '5': Invalid procedure call or argument
Сам код полностью [vba]
Код
Sub getData() Dim sFolderPath$, sFolderName$, sFileName$ Let sFolderPath = ThisWorkbook.Path & "\" Let sFolderName = Dir(sFolderPath, vbDirectory) Do While sFolderName <> "" If GetAttr(sFolderPath & "\" & sFolderName) = vbDirectory And sFolderName <> "." And sFolderName <> ".." Then Debug.Print sFolderPath & sFolderName If sFolderName = "NomenclatureFurniture" Or sFolderName = "NomenclaturePlates" Then Let sFileName = Dir(sFolderPath & sFolderName & "\" & "*.xls") Do While sFileName <> "" Debug.Print sFileName sFileName = Dir Loop End If Debug.Print sFolderPath & sFolderName End If sFolderName = Dir Loop End Sub
[/vba]
От кода требуется, проверить вложенные папки в папке и если соответствует заданному условию, то вывести список файлов в debug. Ошибка вылетает, когда первый цикл Do Loop идет на следующий круг, после первого круга второго цикла Do Loop. В строке где [vba]
Код
sFolderName = Dir
[/vba]
Доброго времени суток, дамы и господа. При использовании вложенного цикла Do Loop в Do Loop выдает ошибку
Run-time error '5': Invalid procedure call or argument
Сам код полностью [vba]
Код
Sub getData() Dim sFolderPath$, sFolderName$, sFileName$ Let sFolderPath = ThisWorkbook.Path & "\" Let sFolderName = Dir(sFolderPath, vbDirectory) Do While sFolderName <> "" If GetAttr(sFolderPath & "\" & sFolderName) = vbDirectory And sFolderName <> "." And sFolderName <> ".." Then Debug.Print sFolderPath & sFolderName If sFolderName = "NomenclatureFurniture" Or sFolderName = "NomenclaturePlates" Then Let sFileName = Dir(sFolderPath & sFolderName & "\" & "*.xls") Do While sFileName <> "" Debug.Print sFileName sFileName = Dir Loop End If Debug.Print sFolderPath & sFolderName End If sFolderName = Dir Loop End Sub
[/vba]
От кода требуется, проверить вложенные папки в папке и если соответствует заданному условию, то вывести список файлов в debug. Ошибка вылетает, когда первый цикл Do Loop идет на следующий круг, после первого круга второго цикла Do Loop. В строке где [vba]
Sub getData() Dim sFolderPath$, vFolderNames(), vFolderName, sFileName$ Let sFolderPath = ThisWorkbook.Path & "\" Let vFolderNames() = Array("NomenclatureFurniture", "NomenclaturePlates") For Each vFolderName In vFolderNames Let sFileName = Dir(sFolderPath & vFolderName & "\" & "*.xls") Do While sFileName <> "" Debug.Print sFileName sFileName = Dir Loop Next vFolderName End Sub
[/vba] Интересно, что не нравиться VBA в первом варианте? Подозреваю, что, что-то ни то с Dir-ом. Но вот что и почему, догнать ума не хватает.....
В таком варианте фурычит. [vba]
Код
Sub getData() Dim sFolderPath$, vFolderNames(), vFolderName, sFileName$ Let sFolderPath = ThisWorkbook.Path & "\" Let vFolderNames() = Array("NomenclatureFurniture", "NomenclaturePlates") For Each vFolderName In vFolderNames Let sFileName = Dir(sFolderPath & vFolderName & "\" & "*.xls") Do While sFileName <> "" Debug.Print sFileName sFileName = Dir Loop Next vFolderName End Sub
[/vba] Интересно, что не нравиться VBA в первом варианте? Подозреваю, что, что-то ни то с Dir-ом. Но вот что и почему, догнать ума не хватает.....Sobirjon
Сообщение отредактировал Sobirjon - Понедельник, 20.04.2020, 10:57
Как вариант - сначала соберите все нужные папки в массив (коллекцию, словарь) ААА, потом переберите этот ААА и для каждого из элементов ААА выводите список файлов
А почитайте справку по Dir
Цитата
После возврата строки нулевой длины в последующих вызовах необходимо указывать значение pathname, иначе произойдет ошибка.
Как вариант - сначала соберите все нужные папки в массив (коллекцию, словарь) ААА, потом переберите этот ААА и для каждого из элементов ААА выводите список файлов_Boroda_