Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2011, 11:08   #1
MevsWall
 
Регистрация: 29.03.2011
Сообщений: 4
Смущение Поиск файлов в субкаталогах по имени средствами vba

Добрый день!

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

Заранее благодарю!
MevsWall вне форума Ответить с цитированием
Старый 29.03.2011, 11:16   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Код:
Function ReadFileNames(ByVal FolderPath As String)
   On Error Resume Next
    Set fso = CreateObject("scripting.filesystemobject")
    Set curfold = fso.GetFolder(FolderPath)
    If Not curfold Is Nothing Then

        For Each fil In curfold.Files
            If fil.Name Like "*ваше имя.xls" Then
          ListBox1.AddItem curfold.Path & "\" &  fil.Name
            End If
        Next
        For Each sfol In curfold.SubFolders
            ReadFileNames sfol.Path
        Next
        Set fil = Nothing: Set curfold = Nothing: Set fso = Nothing:
    End If
    
End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 29.03.2011, 11:26   #3
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Возможно пригодится.Добавил листбокс как в коде выше-немного тормозит
Вложения
Тип файла: rar NODE.rar (31.5 Кб, 145 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 29.03.2011, 11:28   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Дир ищет только в самой папке
dir /s - со всеми подкаталогами
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 04.04.2011, 15:53   #5
MevsWall
 
Регистрация: 29.03.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Код:
Function ReadFileNames(ByVal FolderPath As String)
   On Error Resume Next
    Set fso = CreateObject("scripting.filesystemobject")
    Set curfold = fso.GetFolder(FolderPath)
    If Not curfold Is Nothing Then

        For Each fil In curfold.Files
            If fil.Name Like "*ваше имя.xls" Then
          ListBox1.AddItem curfold.Path & "\" &  fil.Name
            End If
        Next
        For Each sfol In curfold.SubFolders
            ReadFileNames sfol.Path
        Next
        Set fil = Nothing: Set curfold = Nothing: Set fso = Nothing:
    End If
    
End Function
Спасибо за ответы, но не понимаю. что здесь отвечает за поиск в суб-каталогах. Если убрать все If.. then отсюда:

For Each fil In curfold.Files
If fil.Name Like "*ваше имя.xls" Then
ListBox1.AddItem curfold.Path & "\" & fil.Name
End If
Next

то Msgbox-ами он выведет fil.Name файлов папки сгк, в подкаталогах не ищет.

Если про это:

For Each sfol In curfold.SubFolders
ReadFileNames sfol.Path
Next


то он не читает. Что такое sfol? Sad Facts of Life?)
MevsWall вне форума Ответить с цитированием
Старый 04.04.2011, 15:54   #6
MevsWall
 
Регистрация: 29.03.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
dir /s - со всеми подкаталогами
Спасибо, но это точно работает в vba? Можно пример?
MevsWall вне форума Ответить с цитированием
Старый 04.04.2011, 16:32   #7
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Все прекрасно работает.
Во вложении пример
Цитата:
On Error Resume Next
Set fso = CreateObject("scripting.filesystemo bject")
Set curfold = fso.GetFolder(FolderPath)
If Not curfold Is Nothing Then

For Each fil In curfold.Files
If fil.Name Like "*ваше имя.xls" Then
ListBox1.AddItem curfold.Path & "\" & fil.Name
End If
Next
For Each sfol In curfold.SubFolders
ReadFileNames sfol.Path
Next
Set fil = Nothing: Set curfold = Nothing: Set fso = Nothing:
End If

End Function
Активируйте Лист1 и увидите все файлы в папках
Вложения
Тип файла: rar Подпапки.rar (11.7 Кб, 160 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 04.04.2011, 16:43   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

да, пожалуйста:
Код:
Sub dirdir()
  Shell Environ$("comspec") & " /c Dir /S >dir.txt", vbHide
  MsgBox "Изучайте dir.txt" & "  в " & CurDir
End Sub
в текущем каталоге будет создан файл dir.txt в нем полное содержимое текущего каталога и всех вложенных; и тех, что вложенные в последние; и т.д. - на всю глубину вложений
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 04.04.2011, 17:49   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Сообщение от MevsWall Посмотреть сообщение
Нужно написать макрос, который бы искал в определенной папке (и ее субпапках, обязательно) все файлы, содержащие в названии какую-то строку.
Поиском пользоваться не пробовали?
http://excelvba.ru/code/FilenamesCollection

Цитата:
Код:
' считываем в колекцию coll нужные имена файлов
    Set coll = FilenamesCollection(ПутьКПапке, "*маска##*.xl*")
EducatedFool вне форума Ответить с цитированием
Старый 04.04.2011, 18:38   #10
Djeki
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 136
Хорошо

Цитата:
Сообщение от IgorGO Посмотреть сообщение
да, пожалуйста:
Код:
Sub dirdir()
  Shell Environ$("comspec") & " /c Dir /S >dir.txt", vbHide
  MsgBox "Изучайте dir.txt" & "  в " & CurDir
End Sub
в текущем каталоге будет создан файл dir.txt в нем полное содержимое текущего каталога и всех вложенных; и тех, что вложенные в последние; и т.д. - на всю глубину вложений
Спасибо Игорю. Очень красивое и быстрое решение.. Единственный недостаток - выводит названия файлов на русском языке некорректно. Например: ‘ЇЁб®Є PDF д*©«®ў.xls . Переключение шрифта с Ру на Англ ничего не даёт.. Как исправить этот глюк?? Спасибо за ответ..
Djeki вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск системных файлов средствами VBA Rustr1957 Microsoft Office Access 1 11.11.2010 15:21
поиск файлов средствами делфи №2 hrusha2006 Помощь студентам 1 04.10.2010 08:28
Заполнение таблицы средствами VBA parsn Microsoft Office Excel 2 28.12.2009 14:05
Нужна помощь: выбор файлов исходя из имени файлов Antik163RUS Помощь студентам 4 19.06.2008 21:20