Страницы: 1 2 След.
RSS
Создание списка файлов, хранящихся на диске
 
Коллеги, добрый вечер!  
 
С ростом количества файлов, хранящихся на диске, возникла следующая задачка:  
 
Есть ли возможность написать макрос, который будет просматривать все папки, хранящиеся на диске(включая подпапки) , выцеплять оттуда имена файлов вместе с расширениями и вставлять на лист excel в качестве гиперлинков?    
 
Если есть какие-либо соображения по этому поводу - отпишитесь пожадуйста!  
 
Заранее спасибо!
 
Dim MyFile, MyPath, MyName  
MyFile = Dir("С:\лалала\")  
для получения следующего имени файла  
MyFile = Dir  
 
а вот по поддиректориям я не лазил, может кто другой знает.
 
{quote}{login=Марчук}{date=30.10.2008 04:06}{thema=}{post}Dim MyFile, MyPath, MyName  
MyFile = Dir("С:\лалала\")  
для получения следующего имени файла  
MyFile = Dir  
 
а вот по поддиректориям я не лазил, может кто другой знает.{/post}{/quote}
 
Так вот в этом-то и проблема... Директории нужно как-то учесть...  
 
Помогите)))
 
Sub qq()  
With Application.FileSearch  
.LookIn = "C:\"  
.FileType = msoFileTypeAllFiles  
.SearchSubFolders = True  
.Execute  
For i = 1 To .FoundFiles.Count  
   ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, "A"), Address:=.FoundFiles(i), _  
                              TextToDisplay:=.FoundFiles(i)  
Next  
End With  
End Sub
 
{quote}{login=Prog}{date=30.10.2008 04:49}{thema=}{post}Sub qq()  
With Application.FileSearch  
.LookIn = "C:\"  
.FileType = msoFileTypeAllFiles  
.SearchSubFolders = True  
.Execute  
For i = 1 To .FoundFiles.Count  
   ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, "A"), Address:=.FoundFiles(i), _  
                              TextToDisplay:=.FoundFiles(i)  
Next  
End With  
End Sub{/post}{/quote}  
 
СПАСИБО!!!  
РАБОТАЕТ!  
 
Как вы думаете, если пойти далее - есть возможность представления полученной информации более удобно для восприятия? Например, в виде дерева или списка?
 
мм,  
ну можно анализировать .foundfiles(i) перед    
ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, "A"), Address:=.FoundFiles(i), _  
TextToDisplay:=.FoundFiles(i)  
 
и придумать какую-нибудь логику тут.
 
а тот список, что предоставляет ОС, чем не устраивает?
Живи и дай жить..
 
вот такой есь упрощённый вариант, но можно переделать всё под себя...
 
{quote}{login=Prog}{date=30.10.2008 04:49}{thema=}{post}Sub qq()  
With Application.FileSearch  
.LookIn = "C:\"  
.FileType = msoFileTypeAllFiles  
.SearchSubFolders = True  
.Execute  
For i = 1 To .FoundFiles.Count  
   ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, "A"), Address:=.FoundFiles(i), _  
                              TextToDisplay:=.FoundFiles(i)  
Next  
End With  
End Sub{/post}{/quote}  
У меня этот макрос в 2007 не работает, что я делаю не так?
 
{quote}{login=}{date=14.12.2009 13:30}{thema=}{post}У меня этот макрос в 2007 не работает, что я делаю не так?{/post}{/quote}  
Что никто не знает?
 
Спасибо за ответ. А альтернатива методу FileSearch в 2007-ом имеется? Или не стоит и пытаться и лучше к 2003-му обратиться?
 
{quote}{login=The_Prist}{date=14.12.2009 02:46}{thema=}{post}Я знаю. В 2007 Офисе метод FileSearch отсутствует. Разработчики сочли его лишним. В смысле он где-то есть, но он не может использоваться.  
 
P.S.Даже если Вы напишите ОЧЕНЬ-ОЧЕНЬ срочно, ничего от этого не измениться.{/post}{/quote}  
 
Еще один косяк от 2007... Пока минусов больше чем плюсов (для Лузера).
 
{quote}{login=Prog}{date=30.10.2008 04:49}{thema=}{post}Sub qq()  
With Application.FileSearch  
.LookIn = "C:\"  
.FileType = msoFileTypeAllFiles  
.SearchSubFolders = True  
.Execute  
For i = 1 To .FoundFiles.Count  
   ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, "A"), Address:=.FoundFiles(i), _  
                              TextToDisplay:=.FoundFiles(i)  
Next  
End With  
End Sub{/post}{/quote}  
Ни как не въеду- как сделать чтобы макрос выдавал список только из фалов с определенным расширением например ".xls".  
Подскажите пожалуйста.  
Спасибо
 
{quote}{login=The_Prist}{date=14.12.2009 03:17}{thema=Re: Re: }{post}{quote}{login=Alexander_V}{date=14.12.2009 03:13}{thema=Re: }{post}Ни как не въеду- как сделать чтобы макрос выдавал список только из фалов с определенным расширением например ".xls".{/post}{/quote}  
sName = Dir(ThisWorkbook.Path & "\" & oItem.Name & "\" & "*.xls"){/post}{/quote}  
Уважаемый The_Prist, а в коде куда втавить?
 
{quote}{login=The_Prist}{date=14.12.2009 03:08}{thema=}{post}Вот Вам через FSO(он мне наиболее симпатичен, т.к. не может вызвать перегруза памяти в отличии от рекурсии)  
 
Sub Get_FileName_InSubFolders_FSO()  
   Dim sName As String, oFSO As Object, oItem As Object, li As Long  
   Set oFSO = CreateObject("Scripting.FileSystemObject")  
   For Each oItem In oFSO.GetFolder(ThisWorkbook.Path).SubFolders  
       sName = Dir(ThisWorkbook.Path & "\" & oItem.Name & "\" & "*.*")  
       Do While sName <> ""  
           li = li + 1: Cells(li, 1) = sName  
           sName = Dir  
       Loop  
   Next  
End Sub  
 
Вместо  
sName = Dir(ThisWorkbook.Path & "\" & oItem.Name & "\" & "*.*")  
задайте свой путь и маску файлов или получайте их через диалоговое окно.{/post}{/quote}  
The_Prist, спасибо за макрос. Будем пробовать.
 
{quote}{login=}{date=14.12.2009 03:21}{thema=Re: }{post}{quote}{login=The_Prist}{date=14.12.2009 03:08}{thema=}{post}Вот Вам через FSO(он мне наиболее симпатичен, т.к. не может вызвать перегруза памяти в отличии от рекурсии)  
 
Sub Get_FileName_InSubFolders_FSO()  
   Dim sName As String, oFSO As Object, oItem As Object, li As Long  
   Set oFSO = CreateObject("Scripting.FileSystemObject")  
   For Each oItem In oFSO.GetFolder(ThisWorkbook.Path).SubFolders  
       sName = Dir(ThisWorkbook.Path & "\" & oItem.Name & "\" & "*.*")  
       Do While sName <> ""  
           li = li + 1: Cells(li, 1) = sName  
           sName = Dir  
       Loop  
   Next  
End Sub  
 
Вместо  
sName = Dir(ThisWorkbook.Path & "\" & oItem.Name & "\" & "*.*")  
задайте свой путь и маску файлов или получайте их через диалоговое окно.{/post}{/quote}  
The_Prist, спасибо за макрос. Будем пробовать.{/post}{/quote}  
У меня этот код никак не действует.
 
Sub qq()  
With Application.FileSearch  
.LookIn = "C:\"  
.FileType = msoFileTypeAllFiles  
.SearchSubFolders = True  
.Execute  
For i = 1 To .FoundFiles.Count  
ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, "A"), Address:=.FoundFiles(i), _  
TextToDisplay:=.FoundFiles(i)  
Next  
End With  
End Sub  
 
Он у меня отлично идет но выдает список из всех файлов, а мне нужно его подправить, что бы выдавал с определенным разрешением, к примеру .xls .
 
{quote}{login=The_Prist}{date=14.12.2009 03:43}{thema=}{post}Мне трудно проверить, т.к. не имею 2003. Наверное так  
 
Sub qq()  
With Application.FileSearch  
.LookIn = "C:\"  
.FileType = msoFileTypeAllFiles  
.SearchSubFolders = True  
.Execute  
For i = 1 To .FoundFiles.Count  
if .FoundFiles(i) Like "*.xls" then  
li = li + 1  
ActiveSheet.Hyperlinks.Add Anchor:=Cells(li, "A"), Address:=.FoundFiles(i), _  
TextToDisplay:=.FoundFiles(i)  
end if  
Next  
End With  
End Sub{/post}{/quote}  
Все круто!!! То что надо.  
The_Prist, Большое спасибо.
 
{quote}{login=The_Prist}{date=14.12.2009 03:08}{thema=}{post}Вот Вам через FSO(он мне наиболее симпатичен, т.к. не может вызвать перегруза памяти в отличии от рекурсии)  
 
Sub Get_FileName_InSubFolders_FSO()  
   Dim sName As String, oFSO As Object, oItem As Object, li As Long  
   Set oFSO = CreateObject("Scripting.FileSystemObject")  
   For Each oItem In oFSO.GetFolder(ThisWorkbook.Path).SubFolders  
       sName = Dir(ThisWorkbook.Path & "\" & oItem.Name & "\" & "*.*")  
       Do While sName <> ""  
           li = li + 1: Cells(li, 1) = sName  
           sName = Dir  
       Loop  
   Next  
End Sub  
 
Вместо  
sName = Dir(ThisWorkbook.Path & "\" & oItem.Name & "\" & "*.*")  
задайте свой путь и маску файлов или получайте их через диалоговое окно.{/post}{/quote} Файл с этим макросом находится на рабочем столе. Здесь же имеются другие файлы и папки. Так вот в списке, сформированном макросом, отсутствуют файлы с рабочего стола, но выведены файлы находящиеся в других папках на РС. Что надо подправить, чтобы выводился список файлов именно из той директории, где находится файл с макросом?  
Спасибо.
 
Исправить всего одну строку:  
Sub qq()  
With Application.FileSearch  
.LookIn = ThisWorkbook.Path 'Вот эту  
.FileType = msoFileTypeAllFiles  
.SearchSubFolders = True  
.Execute  
For i = 1 To .FoundFiles.Count  
If .FoundFiles(i) Like "*.xls" Then  
li = li + 1  
ActiveSheet.Hyperlinks.Add Anchor:=Cells(li, "A"), Address:=.FoundFiles(i), _  
TextToDisplay:=.FoundFiles(i)  
End If  
Next
 
Юрий М, у меня Ваш макрос не сработал. Эксель 2010.
 
Вы же не говорили, что у Вас 2010 - в нём убрали .FileSearch
 
Если кто-то не умеет пользоваться Яндексом - напомню ссылку на готовое решение для поиска файлов, и вывода их списка на лист: http://excelvba.ru/code/FilenamesCollection
 
Зачем изобретать велосипед, поставь asap utilites (см. Ссылки)
O Tempora, O Mores!!!
 
{quote}{login=Юрий М}{date=09.09.2011 01:17}{thema=}{post}Вы же не говорили, что у Вас 2010 - в нём убрали .FileSearch{/post}{/quote} Нет, не говорил, но я изначально спросил про макрос не с FileSearch, а с FSO от The_Prist. FSO в 2010 работает, правда надо подправить, под мои нужды и не знаю как.
 
Вот у меня что-то подобное нашлось...
 
Спасибо всем, и отдельно за post_258025.xls.
 
Писалось еще под офис 98. И в 2010 работает:-)  
 
30505
Я сам - дурнее всякого примера! ...
 
Соврал. Офис 7.
Я сам - дурнее всякого примера! ...
Страницы: 1 2 След.
Читают тему
Наверх
Loading...