Консультация № 159436
02.02.2009, 23:23
0.00 руб.
0 5 1
Здравствуйте, подскажите пожалуйста, как осуществить поиск файла в определённой папке, по части имени файла при помощи ВБА. Заранее спасибо.

Обсуждение

Неизвестный
03.02.2009, 03:44
общий
см функцию Dir
осуществляет поиск файлов по маске:

MsgBox Dir("c:\Windows\exp*")

для папок:
MsgBox Dir("c:\Win*", vbDirectory)
давно
Модератор
137394
1850
03.02.2009, 21:51
общий
это ответ
Здравствуйте, Ципихович Эндрю!
Вы не написали, что делать с найденными именами файлов, поэтому по своему разумению
в приложении привожу макрос на VBA для MS Excel, который решает поставленную задачу,
выводя имена найденных файлов в таблицу.
Предложенный способ HookEst в минифоруме находит только один файл.



Приложение:
Sub Макрос1()

' Ищем в указанной папке файлы содержащие в имени указанный текст
' Список файлов выводим на указанный лист в указанную колонку таблицы Excel

Path = "C:\Windows" ' Папка, где смотрим файлы
PartName = "unin" ' Искомая часть имени

Sheets("Лист2").Columns("A").ClearContents ' Очищаем колонку A на листе Лист2

Set FSO = CreateObject("Scripting.FileSystemObject")
Set FDir = FSO.GetFolder(Path)
Set Files = FDir.Files

i = 0
For Each File In Files
Name = File.Name
If InStr(1, Name, PartName, 1) > 0 Then
Sheets("Лист2").Range("A1").Offset(i, 0) = Name
i = i + 1
End If
Next

End Sub

Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
03.02.2009, 22:29
общий
to Megaloman.
Мнение.
Вы выложили вполне работоспособный код, в котором в качестве имен переменных используются "Path" и "Name".
Не стоит рекомендовать применение их в таком качестве, т.к. они, не являясь зарезервированными словами, используются как названия свойств.
Это не есть хороший тон, возможны проблемы в будущем. В таком виде -"sPath", "sName", проблем не будет.
С уважением.
Евгений.

Неизвестный
04.02.2009, 02:20
общий
Чтоб найти другие файлы, также соответствующие условиям поиск, нужно вызвать Dir без параметров.
например:
Код:

...
Dim f As String
f = Dir("C:\windows\system32\*fix*")
While f <> ""
MsgBox f
f = Dir
Wend
...
End Sub

выведет все файлы из "c:\windows\system32" в имени которых встречается "fix" (у меня это fixmapi.exe и loadfix.com)

давно
Модератор
137394
1850
04.02.2009, 09:47
общий
то Тесленко Евгений Алексеевич. Наверное насчёт хорошего тона Вы правы, но в приведенном контексте вроде бы всё корректно и код работоспособен. Вообще-то я таких вещей избегаю (лучше перестраховаться - заповедь бюрократа и программиста). Неплохо бы еще все переменные описать (Dim ...). Лет 20 назад в умной книге прочёл: кто начал программировать с бейсика - потерянный для программирования человек. А кто с Фортрана - недалеко от него ушел. Я начинал с Фортрана.... (VBA тогда еще не было) А еще заповедь - не исправляй правильно работающий код.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа