Страницы: 1
RSS
VBA - поиск подпапки в папке по части названия и открытие файла в ней по части названия
 
Добрый вечер, Господа.    
 
Передо мной стоит такая задача:  
В файл excel скопировать определенные данные из разных файлов. Ничего нового? 100 раз обсуждалось? Да, вы правы. И это я, пожалуй, смогу реализовать средствами VBA.  
 
Проблема в том, что файлы, в которых находятся вожделенные данные очень хитро зарыты и разбросаны по разным папкам и подпапкам.    
 
 
Привожу пример систематизации и, собственно, той задачи, в которой нужна ваша помощь:  
Пользователь в файле excel, который лежит на диске там, где пользователю хочется, нажимает кнопку и через проводник указывает папку, в которой будет проводиться поиск. Скажем, пользователь хочет осуществить поиск в папке с именем "Основная папка"  
Далее автоматически происходит следующий поиск в "Основной папке":  
1 - ищем папки, названия которых начинаются со слова "Заказ" (это может быть папка с именем "Заказ-1", "Заказ мой", "Заказ"). Все, что не удовлетворяет этим требованиям, пропускаем.  
2 - В каждой папке, удовлетворяющей критерию "Заказ" ищем подпапку с именем "Нужная папка" (полное совпадение).  
3 - Если такая папка найдена, открываем ее и ищем файл excel, название которого заканчивается словом  "order" ИЛИ "orders" (т.е. название нужного файла может быть, например "Мой order" или "123 orders" или "new order")  
4 - если файл найден, открываем его.    
5 - ну, а как дальше сориентироваться в самом файле и скопировать из него данные, это я знаю.    
Т.о. перебираются все папки по указанным выше критериям и копируются данные.....  
 
Помогите, пож-ста, с реализацией пунктов 1 - 4. Не знаю, как это реализовать...    
Во вложении все эти папки и подпапки и еще подпапки, просто для визуализации процесса...    
Благодарю за помощь!
 
Вам поможет функция Dir()  
Но, поскольку ее нельзя вызывать рекурсивно (увы), Вам в помощь еще и:    
VBA: Как средствами FSO получить список всех вложенных подпапок и вывести их в виде отдельного списка ?    
http://msoffice.nm.ru/faq/macros/wsh.htm#faq297  
 
И посмотрите остальные советы: http://msoffice.nm.ru/faq/macros.htm  
там несколько способов доступа к файловой системе  
 
VBA: Как определить наличие файла средствами FSO ?    
http://msoffice.nm.ru/faq/macros/wsh.htm#faq319
Bite my shiny metal ass!      
 
Вот Вам макрос:  
 
 
Sub test()  
   SourceFolder = "C:\Documents and Settings\Игорь\Рабочий стол\Основная папка\"  
   Dim FileNames As New Collection  
   Set fso = CreateObject("scripting.filesystemobject")  
   Set curfold = fso.GetFolder(SourceFolder)  
 
   If Not curfold Is Nothing Then  
       For Each sfol_1 In curfold.SubFolders  
           If sfol_1.Name Like "Заказ*" Then  
               For Each sfol_2 In sfol_1.SubFolders  
                   If sfol_2.Name = "Нужная папка" Then  
                       For Each fil In sfol_2.Files  
                           If fil.Name Like "*order*.xls*" Then FileNames.Add fil.Path, fil.Path  
                       Next  
                   End If  
               Next  
           End If  
       Next  
   End If  
   Set fil = Nothing: Set curfold = Nothing: Set fso = Nothing  
 
   For Each Filename In FileNames  
       Debug.Print Filename  
   Next  
End Sub  
 
 
А вот - результат его работы:  
 
C:\Documents and Settings\Игорь\Рабочий стол\Основная папка\Заказ-1\Нужная папка\еще order.xls  
C:\Documents and Settings\Игорь\Рабочий стол\Основная папка\Заказ-2\Нужная папка\2 orders.xls  
C:\Documents and Settings\Игорь\Рабочий стол\Основная папка\Заказ-6\Нужная папка\Мой order.xls  
 
 
Как выбрать папку, и как лучше обрабатывать файлы, - можете посмотреть пример здесь:  
http://excelvba.ru/Addins.html  
(в той надстройке есть аналогичная функция сбора данных из разных файлов)
 
EducatedFool, Лузер,  
Большое спасибо за ссылки, советы и помощь. Будем читать, пробовать
Страницы: 1
Читают тему
Наверх