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

Вход

Регистрация

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

 

= Мир MS Excel/Тип данных, возвращаемый методом GetFolder - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Тип данных, возвращаемый методом GetFolder (Макросы/Sub)
Тип данных, возвращаемый методом GetFolder
StoTisteg Дата: Пятница, 05.10.2018, 00:36 | Сообщение № 1
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Коллеги, я тут решил поизучать объект FileSytemObject и просто упражнения ради (и пользы для, чтобы получать ещё и список папок) попробовал переписать знаменитую FilenamesCollection с использованием раннего связывания. И упёрся в то, что никак не возьму в толк, какой же всё-таки конкретно тип возвращает строка[vba]
Код
Set curfold = FSO.GetFolder(FolderPath)
[/vba]Пробовал описывать и как [vba]
Код
Dim curfold As Folders
[/vba] и [vba]
Код
Dim curfold As Folder
[/vba]всё равно ругается при запуске на [vba]
Код
For Each sfol In curfold.SubFolders
[/vba] As Variant и As Object, понятное дело, кушает, но было бы любопытно знать, какой это конкретный Object...


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеКоллеги, я тут решил поизучать объект FileSytemObject и просто упражнения ради (и пользы для, чтобы получать ещё и список папок) попробовал переписать знаменитую FilenamesCollection с использованием раннего связывания. И упёрся в то, что никак не возьму в толк, какой же всё-таки конкретно тип возвращает строка[vba]
Код
Set curfold = FSO.GetFolder(FolderPath)
[/vba]Пробовал описывать и как [vba]
Код
Dim curfold As Folders
[/vba] и [vba]
Код
Dim curfold As Folder
[/vba]всё равно ругается при запуске на [vba]
Код
For Each sfol In curfold.SubFolders
[/vba] As Variant и As Object, понятное дело, кушает, но было бы любопытно знать, какой это конкретный Object...

Автор - StoTisteg
Дата добавления - 05.10.2018 в 00:36
krosav4ig Дата: Пятница, 05.10.2018, 02:43 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2346
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
Scripting.Folder или просто Folder
в Object browser можно проверить, при подключенном референсе Microsoft Scripting Runtime выбираем библиотеку Scripting, в поле поиска пишем getfolder и жмакаем Enter
ругается при запуске

в референсах случаем нету ничего с пометкой MISSING: ?
у мну так без ошибок отрабатывает[vba]
Код
Function FilenamesCollection(ByVal FolderPath As String, Optional ByVal Mask As String = "", _
                             Optional ByVal SearchDeep As Long = 999) As Collection
    ' Получает в качестве параметра путь к папке FolderPath,
    ' маску имени искомых файлов Mask (будут отобраны только файлы с такой маской/расширением)
    ' и глубину поиска SearchDeep в подпапках (если SearchDeep=1, то подпапки не просматриваются).
    ' Возвращает коллекцию, содержащую полные пути найденных файлов
    ' (применяется рекурсивный вызов процедуры GetAllFileNamesUsingFSO)

    Set FilenamesCollection = New Collection    ' создаём пустую коллекцию
    Dim FSO As New FileSystemObject       ' создаём экземпляр FileSystemObject
    GetAllFileNamesUsingFSO FolderPath, Mask, FSO, FilenamesCollection, SearchDeep    ' поиск
    Set FSO = Nothing: Application.StatusBar = False    ' очистка строки состояния Excel
End Function

Function GetAllFileNamesUsingFSO(ByVal FolderPath As String, ByVal Mask As String, ByRef FSO As FileSystemObject, _
                    ByRef FileNamesColl As Collection, ByVal SearchDeep As Long)
    ' перебирает все файлы и подпапки в папке FolderPath, используя объект FSO
    ' перебор папок осуществляется в том случае, если SearchDeep > 1
    ' добавляет пути найденных файлов в коллекцию FileNamesColl
    Dim curfold As Folder, sfol As Folder, fil As File
    Set curfold = FSO.GetFolder(FolderPath)
    If Not curfold Is Nothing Then    ' если удалось получить доступ к папке

        ' раскомментируйте эту строку для вывода пути к просматриваемой
        ' в текущий момент папке в строку состояния Excel
        Application.StatusBar = "Поиск в папке: " & FolderPath

        For Each fil In curfold.Files    ' перебираем все файлы в папке FolderPath
            If fil.Name Like "*" & Mask Then FileNamesColl.Add fil.Path
        Next
        SearchDeep = SearchDeep - 1    ' уменьшаем глубину поиска в подпапках
        If SearchDeep Then    ' если надо искать глубже
            For Each sfol In curfold.SubFolders    ' ' перебираем все подпапки в папке FolderPath
                GetAllFileNamesUsingFSO sfol.Path, Mask, FSO, FileNamesColl, SearchDeep
            Next
        End If
        Set fil = Nothing: Set curfold = Nothing    ' очищаем переменные
    End If
[/vba]
К сообщению приложен файл: 1209584.png (81.9 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
СообщениеScripting.Folder или просто Folder
в Object browser можно проверить, при подключенном референсе Microsoft Scripting Runtime выбираем библиотеку Scripting, в поле поиска пишем getfolder и жмакаем Enter
ругается при запуске

в референсах случаем нету ничего с пометкой MISSING: ?
у мну так без ошибок отрабатывает[vba]
Код
Function FilenamesCollection(ByVal FolderPath As String, Optional ByVal Mask As String = "", _
                             Optional ByVal SearchDeep As Long = 999) As Collection
    ' Получает в качестве параметра путь к папке FolderPath,
    ' маску имени искомых файлов Mask (будут отобраны только файлы с такой маской/расширением)
    ' и глубину поиска SearchDeep в подпапках (если SearchDeep=1, то подпапки не просматриваются).
    ' Возвращает коллекцию, содержащую полные пути найденных файлов
    ' (применяется рекурсивный вызов процедуры GetAllFileNamesUsingFSO)

    Set FilenamesCollection = New Collection    ' создаём пустую коллекцию
    Dim FSO As New FileSystemObject       ' создаём экземпляр FileSystemObject
    GetAllFileNamesUsingFSO FolderPath, Mask, FSO, FilenamesCollection, SearchDeep    ' поиск
    Set FSO = Nothing: Application.StatusBar = False    ' очистка строки состояния Excel
End Function

Function GetAllFileNamesUsingFSO(ByVal FolderPath As String, ByVal Mask As String, ByRef FSO As FileSystemObject, _
                    ByRef FileNamesColl As Collection, ByVal SearchDeep As Long)
    ' перебирает все файлы и подпапки в папке FolderPath, используя объект FSO
    ' перебор папок осуществляется в том случае, если SearchDeep > 1
    ' добавляет пути найденных файлов в коллекцию FileNamesColl
    Dim curfold As Folder, sfol As Folder, fil As File
    Set curfold = FSO.GetFolder(FolderPath)
    If Not curfold Is Nothing Then    ' если удалось получить доступ к папке

        ' раскомментируйте эту строку для вывода пути к просматриваемой
        ' в текущий момент папке в строку состояния Excel
        Application.StatusBar = "Поиск в папке: " & FolderPath

        For Each fil In curfold.Files    ' перебираем все файлы в папке FolderPath
            If fil.Name Like "*" & Mask Then FileNamesColl.Add fil.Path
        Next
        SearchDeep = SearchDeep - 1    ' уменьшаем глубину поиска в подпапках
        If SearchDeep Then    ' если надо искать глубже
            For Each sfol In curfold.SubFolders    ' ' перебираем все подпапки в папке FolderPath
                GetAllFileNamesUsingFSO sfol.Path, Mask, FSO, FileNamesColl, SearchDeep
            Next
        End If
        Set fil = Nothing: Set curfold = Nothing    ' очищаем переменные
    End If
[/vba]

Автор - krosav4ig
Дата добавления - 05.10.2018 в 02:43
StoTisteg Дата: Пятница, 05.10.2018, 10:40 | Сообщение № 3
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
в референсах случаем нету ничего с пометкой MISSING: ?
Об этом я первым делом подумал...


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
в референсах случаем нету ничего с пометкой MISSING: ?
Об этом я первым делом подумал...

Автор - StoTisteg
Дата добавления - 05.10.2018 в 10:40
StoTisteg Дата: Понедельник, 29.10.2018, 13:23 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Ну да, загадка века — пересохранил файл SaveAs'ом с curfold As Folder и всё заработало...


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеНу да, загадка века — пересохранил файл SaveAs'ом с curfold As Folder и всё заработало...

Автор - StoTisteg
Дата добавления - 29.10.2018 в 13:23
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Тип данных, возвращаемый методом GetFolder (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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