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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2009, 21:39   #1
SIV84
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 44
По умолчанию Поиск нужных файлов по системным дискам

Доброе время суток. Хочу изнать насколько реально реализовать мою задумку. Насколько реально написать макрос, который при первом запуске программы произвел бы поиск нужных файлов для ее работы по системным дисками возможен ли вариант поска по сетевым дискам?

Зараннее спасибо за ответ!
SIV84 вне форума Ответить с цитированием
Старый 24.02.2009, 22:20   #2
mistx
Форумчанин
 
Регистрация: 30.09.2008
Сообщений: 104
По умолчанию

Цитата:
Сообщение от SIV84 Посмотреть сообщение
Доброе время суток. Хочу изнать насколько реально реализовать мою задумку. Насколько реально написать макрос, который при первом запуске программы произвел бы поиск нужных файлов для ее работы по системным дисками возможен ли вариант поска по сетевым дискам?

Зараннее спасибо за ответ!
вот макрос
этот макрос находит все файлы с расш-м .jpg на определенном диске
в определ-й директории.
выводит в ексел - имя и путь файла
Sub findJpgFiles()
Cells.Clear
' добав-е заголовков
Range("A1:D1").Value = Array("FileName", "Path", "FileName")
NextRow = 2
With Application.FileSearch
.NewSearch
.LookIn = "C:\"
.SearchSubFolders = True
.Filename = "*.jpg"
.Execute
FilesToProcess = .FoundFiles.Count
For i = 1 To .FoundFiles.Count
ThisEntry = .FoundFiles(i)
Cells(NextRow, 1).Value = ThisEntry
For j = Len(ThisEntry) To 1 Step -1
If Mid(ThisEntry, j, 1) = Application.PathSeparator Then
Cells(NextRow, 2) = Left(ThisEntry, j)
Cells(NextRow, 3) = Mid(ThisEntry, j + 1)
Exit For
End If
Next j
NextRow = NextRow + 1
Next i
End With
End Sub

Последний раз редактировалось mistx; 24.02.2009 в 22:25.
mistx вне форума Ответить с цитированием
Старый 24.02.2009, 22:28   #3
SIV84
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 44
По умолчанию

Подскажите пожалуйста почему на выполнении Application.FileSearch выдает ошибку Object doesn't support this action
SIV84 вне форума Ответить с цитированием
Старый 24.02.2009, 22:54   #4
mistx
Форумчанин
 
Регистрация: 30.09.2008
Сообщений: 104
По умолчанию

Цитата:
Сообщение от SIV84 Посмотреть сообщение
Подскажите пожалуйста почему на выполнении Application.FileSearch выдает ошибку Object doesn't support this action
У вас какой excel?
2003 или 2007?
mistx вне форума Ответить с цитированием
Старый 25.02.2009, 02:26   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Сообщение от SIV84 Посмотреть сообщение
Подскажите пожалуйста почему на выполнении Application.FileSearch выдает ошибку Object doesn't support this action
Всё очень просто:
Цитата:
Application.FileSearch doesn't exist in Excel 2007
В 2007-й версии Microsoft отключила Application.FileSearch (он присутствует, но доступа к нему нет )

Так что, если у Вас Office 2007, придётся использовать другие способы...

Посмотрите здесь: http://www.sql.ru/forum/actualthread...&hl=filesearch

Или здесь

Цитата:
Сообщение от mistx Посмотреть сообщение
вот макрос
этот макрос находит все файлы с расш-м .jpg на определенном диске
в определ-й директории.
Макрос, конечно, хороший. Но работает как-то странно...
Если написать .LookIn = "c:\": .SearchSubFolders = True: .Filename = "*.bmp", то он находит, к примеру, 27 файлов,
а если .LookIn = "c:\windows": .SearchSubFolders = True: .Filename = "*.bmp" - то намного больше (около 400)

Почему так - не понял...

Цитата:
Сообщение от SIV84 Посмотреть сообщение
поиск нужных файлов для ее работы по системным дискам
А у Вас много системных дисков?
Вообще-то, системный диск обычно один...

Цитата:
Сообщение от SIV84 Посмотреть сообщение
Насколько реально написать макрос, который при первом запуске программы произвел бы поиск нужных файлов для ее работы по системным дисками возможен ли вариант поска по сетевым дискам?
Вполне реально, но поиск может занять много много времени.
Особенно, если искать на сетевых дисках...

По сути, работа с сетевыми дисками практически ничем не отличается от работы с локальными. Так что проблем с сетевыми дисками не будет.

Лучше просматривать только отдельные диски или папки.

Вообще, Application.FileSearch - глючная штука, поэтому я рекомендовал бы Вам использовать FileSystemObject (к тому же, он будет нормально работать на всех версиях Windows и Office)

Последний раз редактировалось EducatedFool; 25.02.2009 в 02:28.
EducatedFool вне форума Ответить с цитированием
Старый 25.02.2009, 19:01   #6
mistx
Форумчанин
 
Регистрация: 30.09.2008
Сообщений: 104
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Макрос, конечно, хороший. Но работает как-то странно...
Если написать .LookIn = "c:\": .SearchSubFolders = True: .Filename = "*.bmp", то он находит, к примеру, 27 файлов,
а если .LookIn = "c:\windows": .SearchSubFolders = True: .Filename = "*.bmp" - то намного больше (около 400)

Почему так - не понял...
Очень странно.
сейчас сделал поиск файлов bmp
на диске с - около 5669
в папке windows нашел 407.
Вроде все ок.
mistx вне форума Ответить с цитированием
Старый 31.03.2009, 10:15   #7
Ralf_ru
Пользователь
 
Регистрация: 19.03.2009
Сообщений: 26
Вопрос Перебор файлов

Госпада помагите...
Ищу файлы с помощью MatchesMask:
type
TFileName = string;
TMatchesMask = function(TFileName:string;mask:stri ng): boolean;



if FindFirst(filename, faAnyFile,SearchRec) = 0 then
repeat
if MatchesMask(searchRec.name,FileName ) then
begin
n := n + 1;
a[n]:=(SearchRec.Name);
end;
until FindNext(SearchRec) <> 0;
При чтении второго условия выдается ошибка - proect.exe raised too many consecutive exceptions : 'access violation at 0x00000000: read of address 0x00000000'. process stoped.
В чем дело? Может в объявлении MatchesMask (неправильном), может потомучто в Viste, а может ещё что?
Ralf_ru вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как работать с системным временем Dinarochka Помощь студентам 2 27.05.2008 18:28
Поиск файлов student_63 Общие вопросы Delphi 6 07.03.2008 19:00
поиск файлов KORN Компоненты Delphi 3 12.10.2007 05:42