Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: Программа для выбора файла, не могу найти ошибку Добавлено: 21.08.08 14:24  

Автор вопроса:  abv
Написал программу для выбора файла, работает отлично. Но не могу заставить ее открывать нужную папку. Помогите кто чем может. Заранее спасибо.
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
Автор ответа:
 Lion



ICQ: 367220539 

Вопросов: 13
Ответов: 55
 Web-сайт: lammeru.net
 Профиль | | #1
Добавлено: 21.08.08 15:13
Я несколько по другому решаю такие проблемы: Пишем в VB фунцию для выбора файла. Компилируем в .dll. Затем подгружаем в excell. Много плюсов. И ни одного минуса.

Ответить

Номер ответа: 2
Автор ответа:
 abv



Вопросов: 4
Ответов: 16
 Профиль | | #2 Добавлено: 21.08.08 15:30
Спасибо за внимание к данному вопросу. Боюсь что совет для меня бесполезен. Мне надо заставить макрос считывать путь к папке из ячейки и открывать ее. Выбор нужного файла производится вручную методом перебора. Это и есть цель автоматизации - найти нужный файл, посмотрев содержимое всех "подозрительных" объектов. Наши девушки менеджеры уже кипятком писают в ожидании этого чуда.

Ответить

Номер ответа: 3
Автор ответа:
 Pavel



Вопросов: 0
Ответов: 36
 Профиль | | #3 Добавлено: 21.08.08 15:57
Не знаю, я ввёл в ячейку В13 "C:\Temp\" (без кавычек) и всё заработало. Поменял с C:\Temp\ на C:\Test\ и тоже заработало.
- Может вы в конце слэш не ставите?
- Или C у вас русская?
- или адрес не в ячейке В13 у вас прописан

Ответить

Номер ответа: 4
Автор ответа:
 abv



Вопросов: 4
Ответов: 16
 Профиль | | #4 Добавлено: 21.08.08 17:14
Адрес в ячейке сетевой
\\192.168.0.200\s1\ЗАКАЗЫ\Заказы\Пробная\
если слеш не поставить - программа ругается
путь работает точно
Возможно какой-нибудь параметр отключен, или библиотека.
На другом компе проверял, тоже открывает Мои документы. У меня уже мысли закончились.

Ответить

Номер ответа: 5
Автор ответа:
 abv



Вопросов: 4
Ответов: 16
 Профиль | | #5 Добавлено: 21.08.08 17:50
На локальной папке проверил после прочтения сообщения. Действительно работает. Это к сожелению не решает проблемы. Спасибо.

Если не составит труда, оцените полезность этого кода. Или подскажите другие пути решения похожих задач.

Ответить

Номер ответа: 6
Автор ответа:
 Pavel



Вопросов: 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
Автор ответа:
 abv



Вопросов: 4
Ответов: 16
 Профиль | | #7 Добавлено: 22.08.08 12:23
Доброго времени суток. Код хороший. Проблема в том, что папок несколько: заказы, договоры, расчеты и т.п., выбрать нужную можно "переключателем" (разультат попадает в B13. В каждой папке больше тысячи файлов. Не трудно представить что может случиться если воспользоваться этим решением. Изначально задача была сформулирована так: менеджеры слегка помнят реквизиты нужного файла, чаще визуальное восприятие содержания указывает на правильный выбор. Названия однотипные, и нужно быстро открыть-закрыть несколько файлов и оставить нужный. С помощью программы операция автоматизируется до 2 щелчков мышом, на каждый файл. Трабл в том что сетевая папка не открывается (подключать сетевой диск пробовал, не помогает. Локальную папку открывает без проблем).

Ответить

Номер ответа: 8
Автор ответа:
 abv



Вопросов: 4
Ответов: 16
 Профиль | | #8 Добавлено: 22.08.08 13:20
Попробовал команду:
Sheets("Set";).Cells(13, 2).Hyperlinks(1).Follow
Она открывает сетевую папку, но не дает нужный результат как Application.FindFile Как совместить эти две функции?
P.S. Если изменить код msgbox на вопрос удалить/оставить жить - получиться отличная прога для разгребания завалов в папках.

Ответить

Номер ответа: 9
Автор ответа:
 Jasmin



Вопросов: 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
Автор ответа:
 abv



Вопросов: 4
Ответов: 16
 Профиль | | #10 Добавлено: 25.08.08 07:46
Jasmin, спасибо за ответ. Этот код работает также как тот, что прислал Pavel. Это не решает проблему по причине указанной мною в ответе № 7.

День третий. Истина где-то рядом.:-(

Ответить

Номер ответа: 11
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #11 Добавлено: 25.08.08 10:40
Какая конкретно причина ?
Если сетевой путь, то приведенный код точно работает. Все файлы находились на сетевом диске.
Если про "переключатель", то можно вставлять путь в ячейку B13 программно и потом опять же .LookIn = Cells(13, 2).Value.
Если по поводу, что папок несколько, тоже можно организовать перебор всех подпапок.
Какая причина ?

Ответить

Номер ответа: 12
Автор ответа:
 abv



Вопросов: 4
Ответов: 16
 Профиль | | #12 Добавлено: 25.08.08 12:54
В каждой папке больше 1000 файлов и для выбора нужно посмотреть содержание 2-3 отвечающих заданным критериям.

Ответить

Номер ответа: 13
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #13 Добавлено: 25.08.08 16:42
Тогда можно, чтобы в соседней ячейке задавали часть имени файла, которую помнят. А в .Filename ее читать/составлять, например, так
.Filename = "*" & Значение ячейки(часть имени файла) & "*.xls"

Ответить

Номер ответа: 14
Автор ответа:
 Jasmin



Вопросов: 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
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #15 Добавлено: 25.08.08 17:08
Но маску для более быстрого просмотра, когда хоть часть имени известна, все же можно задавать как в ответе 13.

Еще если данные для просмотра (например номер документа или ФИО) находятся на одном и том же месте в разных файлах, можно сразу читать данные, не открывая файл.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам