Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Do Loop вложенным циклом - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Do Loop вложенным циклом (Макросы/Sub)
Do Loop вложенным циклом
Sobirjon Дата: Понедельник, 20.04.2020, 10:32 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 140
Репутация: 2 ±
Замечаний: 0% ±

2016
Доброго времени суток, дамы и господа.
При использовании вложенного цикла 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]


Сообщение отредактировал Sobirjon - Понедельник, 20.04.2020, 10:35
 
Ответить
СообщениеДоброго времени суток, дамы и господа.
При использовании вложенного цикла 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]

Автор - Sobirjon
Дата добавления - 20.04.2020 в 10:32
Sobirjon Дата: Понедельник, 20.04.2020, 10:55 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 140
Репутация: 2 ±
Замечаний: 0% ±

2016
В таком варианте фурычит.
[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 - Понедельник, 20.04.2020, 10:57
 
Ответить
СообщениеВ таком варианте фурычит.
[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
Дата добавления - 20.04.2020 в 10:55
_Boroda_ Дата: Понедельник, 20.04.2020, 17:40 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15979
Репутация: 6209 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А почитайте справку по Dir
Цитата
После возврата строки нулевой длины в последующих вызовах необходимо указывать значение pathname, иначе произойдет ошибка.

https://u.to/-u4mGA

Как вариант - сначала соберите все нужные папки в массив (коллекцию, словарь) ААА, потом переберите этот ААА и для каждого из элементов ААА выводите список файлов


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА почитайте справку по Dir
Цитата
После возврата строки нулевой длины в последующих вызовах необходимо указывать значение pathname, иначе произойдет ошибка.

https://u.to/-u4mGA

Как вариант - сначала соберите все нужные папки в массив (коллекцию, словарь) ААА, потом переберите этот ААА и для каждого из элементов ААА выводите список файлов

Автор - _Boroda_
Дата добавления - 20.04.2020 в 17:40
Sobirjon Дата: Среда, 22.04.2020, 04:05 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 140
Репутация: 2 ±
Замечаний: 0% ±

2016
_Boroda_. Спасибо, так и думал :ok:
 
Ответить
Сообщение_Boroda_. Спасибо, так и думал :ok:

Автор - Sobirjon
Дата добавления - 22.04.2020 в 04:05
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Do Loop вложенным циклом (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования Jobsora jooble
© 2010-2021 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!