Вопрос: Программа для выбора файла, не могу найти ошибку | Добавлено: 21.08.08 14:24 |
Автор вопроса: ![]() |
Написал программу для выбора файла, работает отлично. Но не могу заставить ее открывать нужную папку. Помогите кто чем может. Заранее спасибо.
sub fileseatch() ActWbk = ActiveWorkbook.Name ChDir Sheets("Set").Cells(13, 2).Value 'Эта команда не работает, что только не делал - открывает Мои документы While Msg <> 6 If Application.FindFile = False Then Exit Sub OpenFileName = ActiveWorkbook.Name Msg = MsgBox("Этот файл подойдет?", vbYesNoCancel, "Выбор файла") If Msg = 2 Then ActiveWorkbook.Close Exit Sub End If If Msg = 7 Then ActiveWorkbook.Close Wend end sub |
Ответы | Всего ответов: 22 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 367220539 Вопросов: 13 Ответов: 55 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 21.08.08 15:13 |
Я несколько по другому решаю такие проблемы: Пишем в VB фунцию для выбора файла. Компилируем в .dll. Затем подгружаем в excell. Много плюсов. И ни одного минуса. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() Вопросов: 4 Ответов: 16 |
Профиль | Цитата | #2 | Добавлено: 21.08.08 15:30 |
Спасибо за внимание к данному вопросу. Боюсь что совет для меня бесполезен. Мне надо заставить макрос считывать путь к папке из ячейки и открывать ее. Выбор нужного файла производится вручную методом перебора. Это и есть цель автоматизации - найти нужный файл, посмотрев содержимое всех "подозрительных" объектов. Наши девушки менеджеры уже кипятком писают в ожидании этого чуда. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 36 |
Профиль | Цитата | #3 | Добавлено: 21.08.08 15:57 |
Не знаю, я ввёл в ячейку В13 "C:\Temp\" (без кавычек) и всё заработало. Поменял с C:\Temp\ на C:\Test\ и тоже заработало.
- Может вы в конце слэш не ставите? - Или C у вас русская? - или адрес не в ячейке В13 у вас прописан |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() Вопросов: 4 Ответов: 16 |
Профиль | Цитата | #4 | Добавлено: 21.08.08 17:14 |
Адрес в ячейке сетевой
\\192.168.0.200\s1\ЗАКАЗЫ\Заказы\Пробная\ если слеш не поставить - программа ругается путь работает точно Возможно какой-нибудь параметр отключен, или библиотека. На другом компе проверял, тоже открывает Мои документы. У меня уже мысли закончились. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() Вопросов: 4 Ответов: 16 |
Профиль | Цитата | #5 | Добавлено: 21.08.08 17:50 |
На локальной папке проверил после прочтения сообщения. Действительно работает. Это к сожелению не решает проблемы. Спасибо.
Если не составит труда, оцените полезность этого кода. Или подскажите другие пути решения похожих задач. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 36 |
Профиль | Цитата | #6 | Добавлено: 22.08.08 11:41 |
Может так?
Sub FileSearch()
Dim iFileName As String, iPath As String, Result As Long iPath = "\\192.168.0.200\s1\ЗАКАЗЫ\Заказы\Пробная\" '"C:\Temp\" iFileName = Dir(iPath & "*.xls" ![]() Do While iFileName$ <> "" Result = MsgBox(iFileName, 3, "Выбор файла" ![]() If Result = vbCancel Then Exit Sub If Result = vbYes Then Workbooks.Open Filename:=iPath & iFileName Exit Sub End If If Result = vbNo Then iFileName$ = Dir End If Loop End Sub |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() Вопросов: 4 Ответов: 16 |
Профиль | Цитата | #7 | Добавлено: 22.08.08 12:23 |
Доброго времени суток. Код хороший. Проблема в том, что папок несколько: заказы, договоры, расчеты и т.п., выбрать нужную можно "переключателем" (разультат попадает в B13. В каждой папке больше тысячи файлов. Не трудно представить что может случиться если воспользоваться этим решением. Изначально задача была сформулирована так: менеджеры слегка помнят реквизиты нужного файла, чаще визуальное восприятие содержания указывает на правильный выбор. Названия однотипные, и нужно быстро открыть-закрыть несколько файлов и оставить нужный. С помощью программы операция автоматизируется до 2 щелчков мышом, на каждый файл. Трабл в том что сетевая папка не открывается (подключать сетевой диск пробовал, не помогает. Локальную папку открывает без проблем). |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() Вопросов: 4 Ответов: 16 |
Профиль | Цитата | #8 | Добавлено: 22.08.08 13:20 |
Попробовал команду:
Sheets("Set" ![]() Она открывает сетевую папку, но не дает нужный результат как Application.FindFile Как совместить эти две функции? P.S. Если изменить код msgbox на вопрос удалить/оставить жить - получиться отличная прога для разгребания завалов в папках. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #9 | Добавлено: 22.08.08 21:28 |
Вот такой конструкцией пользовалась. В основном на сетевых папках все файлы лежали. Все работает. Но это только для 2003. В 2007 FileSearch не поддерживается из-за некорректности поиска что-ли. Советуют использовать Dir. ![]() ActWbk = ActiveWorkbook.Name
With Application.FileSearch .LookIn = Cells(13, 2).Value .Filename = "*.xls" If .Execute > 0 Then i = 1 Do While i <= .FoundFiles.Count Result = MsgBox(.FoundFiles(i), 3, "Этот файл подходит ?" ![]() If Result = vbCancel Then Exit Sub If Result = vbYes Then Workbooks.Open Filename:=.FoundFiles(i) Exit Sub End If If Result = vbNo Then i = i + 1 End If Loop End If End With |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() Вопросов: 4 Ответов: 16 |
Профиль | Цитата | #10 | Добавлено: 25.08.08 07:46 |
Jasmin, спасибо за ответ. Этот код работает также как тот, что прислал Pavel. Это не решает проблему по причине указанной мною в ответе № 7.
День третий. Истина где-то рядом. ![]() |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #11 | Добавлено: 25.08.08 10:40 |
Какая конкретно причина ?
Если сетевой путь, то приведенный код точно работает. Все файлы находились на сетевом диске. Если про "переключатель", то можно вставлять путь в ячейку B13 программно и потом опять же .LookIn = Cells(13, 2).Value. Если по поводу, что папок несколько, тоже можно организовать перебор всех подпапок. Какая причина ? |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() Вопросов: 4 Ответов: 16 |
Профиль | Цитата | #12 | Добавлено: 25.08.08 12:54 |
В каждой папке больше 1000 файлов и для выбора нужно посмотреть содержание 2-3 отвечающих заданным критериям. |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #13 | Добавлено: 25.08.08 16:42 |
Тогда можно, чтобы в соседней ячейке задавали часть имени файла, которую помнят. А в .Filename ее читать/составлять, например, так .Filename = "*" & Значение ячейки(часть имени файла) & "*.xls"
|
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #14 | Добавлено: 25.08.08 17:05 |
Прочитала пояснения. Думаю вот так получится: ActWbk = ActiveWorkbook.Name
With Application.FileSearch .LookIn = Cells(13, 2).Value .Filename = "*.xls" 'задаем маску файла, чтобы поменьше перебирать ![]() If .Execute > 0 Then i = 1 Do While i <= .FoundFiles.Count 'пока не переберем все файлы отвечающие условию 'открываем файл Workbooks.Open Filename:=.FoundFiles(i) Result = MsgBox(.FoundFiles(i), 3, "Этот файл подходит ?" ![]() If Result = vbCancel Then 'отказываемся от просмотра - закрываем последний открытый файл и заканчиваем процедуру ActiveWorkbook.Close SaveChanges:=False Exit Sub End If If Result = vbYes Then 'нашли, что искали - найденный файл остается открытым, заканчиваем процедуру Exit Sub End If If Result = vbNo Then 'файл не подходит - закрываем последний открытый файл и переходим к сдедующему ActiveWorkbook.Close SaveChanges:=False i = i + 1 End If Loop End If End With |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #15 | Добавлено: 25.08.08 17:08 |
Но маску для более быстрого просмотра, когда хоть часть имени известна, все же можно задавать как в ответе 13.
Еще если данные для просмотра (например номер документа или ФИО) находятся на одном и том же месте в разных файлах, можно сразу читать данные, не открывая файл. |
|