Страницы: 1
RSS
Поиск в проводнике на VBA
 
Как правильно вызвать окно проводника, чтобы вывести список файлов определенного расширения?
Например: Ищем все файлы с расширением txt на диске C:/

Попытался использовать следующий код, но выводит только окно поиска.
Не знаю как правильно подставить аргументы
Set oFnd = CreateObject("Shell.Application").FindFiles
 
Код
Dim dlg As FileDialog, rez
 Set dlg = Application.FileDialog(msoFileDialogFilePicker)
 dlg.AllowMultiSelect = False
 dlg.Title = "Укажите файл для обработки"
 dlg.InitialFileName = "*.txt"
 rez = dlg.Show
например
Живи и дай жить..
 
или

Код
Dim sFile As String
sFile = Application.GetOpenFilename("Files(*.txt),*.txt", , "Выбрать файл", , Files)
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Просмотреть все файлы в папке
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Мне нужно вывести окно проводника с результатом поиска.

Если я использую CreateObject("Shell.Application").FindFiles, выводиться пустое окно, т.к. не заданы аргументы для поиска (Искомые файлы, папка поиска).
 
Цитата
Мне нужно вывести окно проводника с результатом поиска.
Не получится. У FindFiles нет аргументов. Это просто запуск окна поиска.
 
Нашел похожую процедуру.
Помогите расшифровать аргументы и добавить поиск файлов по маске *.txt
Код
Option Explicit
'API declaration for the windows "Search Results" dialog
Private Declare Function ShellSearch& Lib "shell32.dll" _
        Alias "ShellExecuteA" (ByVal hwnd As Long, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Long)
        
Private Const SW_SHOWNORMAL = 1


Sub ShowWindowsSearchDialog_API()
'   Specified drive to Search
    Const szSDrive As String = "C:\"
    
    ShellSearch 0, "find", szSDrive, "", "", SW_SHOWNORMAL
End Sub
 
хорошо, что нашли.
ну а само описание на msdn что ж не поискали?   :)  
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx

пс. эта ссылка - первая из отсюда: http://social.msdn.microsoft.com/search/en-US?query=ShellExecuteA&ac=4
Изменено: ikki - 22.11.2013 16:06:43
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Когда работаю с аргументом find, выводится ошибка  "No association for file extension".  В остальных случаях находит  указанный файл (explore,  open,  edit, print), но с маской *.txt не работает.

Как правильно задать аргументы?
 
А чем не устраивает вариант Слэна?
 
Чилавеку нужна именна акно поиска вендовскае.
Подозреваю, что суть в использовании виндовского окна поиска.
Изменено: SkyPro - 22.11.2013 20:21:14
 
Да, необходимо вызвать окно проводника для поиска файлов
 
Окно проводника и окно поиска - разные вещи.
 
Мне нужно окно вызываемое вот этим кодом Set oFnd = CreateObject("Shell.Application").FindFiles
 
Как вариант, не без проблем (ниже почему). Нужно подключить бибилиотеку Miscrosoft Shell Controls and Automation.
Код
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Public Sub ShowFilteredWindow()
    Const FolderPath As String = "c:\projects"
    Dim pShell As New Shell32.Shell
    Dim pWin As Object, shFolderView As Shell32.ShellFolderView
    Dim pFolder As Shell32.Folder3
    
    Set pFolder = pShell.Namespace(FolderPath)
    pShell.Explore FolderPath
    Sleep 200
    For Each pWin In pShell.Windows
        Set shFolderView = pWin.document
        'узкое место, такая папка в проводнике может быть открыта не один раз
        If shFolderView.Folder.Title = pFolder.Title Then
            shFolderView.FilterView "*.txt"
        End If
    Next
End Sub
 
Библиотеку подключил, на строке shFolderView.FilterView "*.txt" выдает ошибку: "Object doesn´t support this property or method".
 
Я тестировал в win7 64bit, Excel 2010 32bit. Если у вас  win xp... насколько помню, там поиск файлов не входил в состав проводника. Посмотреть смогу только в понедельник.
Простите за любопытство, но зачем нужно использовать именно проводник?
Изменено: anvg - 23.11.2013 16:58:10
 
В нашей организации сотрудники привыкли искать отсканированные документы через проводник.
Ищем документ в реестре сформированном в Excel, сверяем с отсканированной копией.
Все документы сложенны по месяцам и для наглядности проще отсеять документы по типу. Для этого нужно научиться вызывать окно проводника с поиском и искать с определенными условиями.    
 
Цитата
В нашей организации сотрудники привыкли
имхо: у сотрудников в вашей организации сложились плохие привычки. у данного типа задач есть гораздо более приятные и "вкусные" варианты решения.
раз уж у вас есть реестр в Excel и соответствующие файлы с текстами, то гораздо проще. правильнее и удобнее организовать гиперссылки из этого самого реестра на эти самые файлы.
правда, место хранения файлов желательно организовать правильно, раз и навсегда - например, разложить по папкам-контрагентам или датам или ответственным сотрудникам и т.д.
если же и это невозможно и ваши сотрудники "привыкли" таскать файлы туда-сюда - то и это не такая уж большая проблема, особенно в случае наличия какой-либо системы в наименованиях таких файлов - обычный поиск средствами VBA с этим справится достаточно легко.

хотя, конечно. хозяин - барин... ;)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Все это реализовано, но для тех кто не хочет менять привычки хочу сделать поиск через проводник.
 
Цитата
для тех кто не хочет менять привычки
существуют дисциплинарные взыскания(например для Украины- Кзот):
1) Выговор;
2) Увольнение.
Думаю, уже после первого все дружно "захотят"! Если кто дождется второго, то на его место того, кто хочет. У себя дома пусть хотят. На работе надо работать.
Я сам - дурнее всякого примера! ...
 
Цитата
На работе надо работать.
кстати, да.
неэффективный способ работы просто потому, что "мне так нравится" - это неправильно.
тем более - при наличии реализованного эффективного варианта.

но в реальной жизни бывают исключения - "большие" начальники. :(
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Точно, Саш. Но! ""большие" начальники" в большинстве своем малосведущи в Эксе, ВБА и иже.. И если авторитетный в той организации знаток Экса скажет: "А низзя! И чревато!", то в подавляющем числе случаев получится см. пост №21[IMG]
На самом деле, в бытность мою инженером, девчата(моего возраста и старше) дружили со мной, чтоб я им помогал не учиться информационным технологиям. Я писал им программки, иногда выполнял их работу. Но это было в 1999-2001гг. Делаем выводы, время не стоит и работодатели не хотят заниматься благотворительностью на собственных производствах. Да и талантливой(и при этом невостребованной) молодежи хватает. Поэтому считаю пост №21 не противоречащим нормальной, человеческой морали.
Я сам - дурнее всякого примера! ...
 
В WinXP как то всё сложно. Может и Find по-умолчанию и Windows Desktop Search выскочить при использовании CreateObject("Shell.Application").FindFiles (в зависимости что стоит).
Так что, может вам проще сделать форму с ListBox с двумя колонками, в первую видимую выводить имена файлов, а в скрытой колонке хранить путь и имена файлов, и по щелчку на имени файла открывать его в блокноте, организовав поиск файлов по заданному пути через тот же Dir?
Изменено: anvg - 25.11.2013 03:28:54
 
У меня стоит WinXP, по умолчанию запускается  Find.
 
Без вариантов?
Страницы: 1
Читают тему
Наверх