Страницы: 1
RSS
Использование COMMONDIALOG
 
Здравствуйте. Для открытия файлов использую CommonDialog, с разрешением открытия нескольких файлов. Подскажите пожалуйста какие ограничения накладываются на количество открываемых файлов, или на длину введённого в "Имя файла"? У меня файлы разных расширений и длина их имён, естественно, также может быть не одинаковой. Так вот, иногда получается открыть большее количество файлов, а иногда меньшее? Длина имён также играет какую-то роль на огрениченность работы макроса. Хотелось бы конечно, открывать неограниченное количество файлов...
 
Длина имени файла точно ни на что не влияет.  
Количество файлов - влияет, если открывать их все сразу (тут максимальное кол-во ограничено размером оперативной памяти компьютера)  
 
Проще сделать так:    
1) считать в массив (коллекцию) имена выбранных файлов  
2) ПО ОЧЕРЕДИ их открывать, обрабатывать, и закрывать  
 
В этом случае можно обработать ОЧЕНЬ МНОГО файлов (фактически, необграниченное количество)  
 
Я для этих целей использую подобные функции:  
http://excelvba.ru/code/GetFileOrFolderPath  
http://excelvba.ru/code/FilenamesCollection
 
Private Sub ВыводДиалоговогоОкнаОткрыть()  
 
On Error GoTo ОбработкаОшибки 'Если возникнет ошибка, т.е нажата клавиша Cancel с пустым полем имён файлов, отправиться к _  
обработчику ошибки - ОбработкаОшибки.  
окнДиалоговоеОкноОткрыть.CancelError = True 'Обеспечиваем генерацию ощибки.  
окнДиалоговоеОкноОткрыть.Filename = "" ' Изначально место для внесения имён файлов пустое.  
окнДиалоговоеОкноОткрыть.Filter = гстрТипФайла 'Присваиваем свойству Filter строковую переменную гстрТипФайла.  
окнДиалоговоеОкноОткрыть.FilterIndex = гцелНомерППТипаФ 'Устанавливаем фильтр по умолчанию, выбрав для этого значение файлов.  
окнДиалоговоеОкноОткрыть.InitDir = гстрПутьФайлов 'Начальная директория, которая будет открываться при вызове диалогового окна.  
окнДиалоговоеОкноОткрыть.Flags = cdlOFNExplorer Or cdlOFNAllowMultiselect Or cdlOFNFileMustExist Or cdlOFNHideReadOnly 'Or cdOFNLongNames _  
'Выводим диалоговое окно в виде Эксплоэровского. Обеспечиваем выборность нескольких файлов, защиту от неправильно введенного _  
файла или дериктории, а так же скрываем флажок "Только для чтения".  
окнДиалоговоеОкноОткрыть.ShowOpen 'Вызываем диалог "Открыть...".  
Exit Sub 'Выход из процедуры.  
ОбработкаОшибки: 'Обработка перехватываемой ощибки 32755 — Cancel was selected (Выбрана Отмена).  
If Err.Number = 32755 Then  
End ' Если файлы не введены, то и не о чём говорить.  
End If  
End Sub  
Если можно, чуть поподробнее. Вот мой код...  
Private Sub ОпределитьсяСВведённойИнформациейПоФайлам() 'Возвращает наибольший доступный индекс для указанного измерения массива.  
Dim целВсегоЭлементовМассива As Integer  
Dim целСчётчикФайлов As Integer  
Dim целПорядковыйНомерРасширенияФ As Integer  
 
гстрПутьИФ = Split(окнДиалоговоеОкноОткрыть.Filename, vbNullChar) ' Разбиваю всё считанное в массив. Нулевым элементом _  
будет всё длинное имя файла, если введён он один если же введено несколько файлов то нулевым элементом идёт путь к файлам.
 
Прошу прощения, что-то мой код процедуры не правильно отразился. Не знаю как удалить эту ерунду и выслать нормально?
 
Подскажите, пожалуйста, где это именно — "в браузере". Как проверить, или установить. А то я очень часто с такой "бедой" сталкиваюсь. Как Вы понимаете, в этом деле я не очень. А по поводу вашей идеи, не знаю. Я думал так проще всего, ведь файлы самые различные, от разных программ и нашёл только это средство для их открытия.
 
Касательно "стандартных диалоговых окон", если есть место, где можно о них почитать, то буду очень благодарен.
 
В методе GetOpenFileName также есть свойство MultiSelect. Какие же возможности по моему вопросу при работе с этим методом?
 
Спасибо за участие.  
Ответ на свой вопрос я получил на другом форуме. Оказывается у CommonDialog есть свойство MaxFileSize, вот оно то и определяет размер вводимого.  
Но Вы предложили метод попроще, спасибо, я както и незнаю откуда взялась идея работы с этим компонентом. Попробую разобраться со стандартными методами сам, если что то будет не понятно спрошу Вас ещё.
 
Для метода Application.GetOpenFilename нет параметра задающего "по умолчанию" папку, которая бы открывалась при выводе окна- приглашения. Как быть? При использовании CommonDialog такой параметр был — InitDir. Подскажите пожалуйста, как задать папку.
 
Метод использует текущую папку, задайте ее:  
 
ChDir "c:\temp"  
sFiles = Application.GetOpenFilename("All Files(*.*),*.*", , "Выбрать файлы", "Выбрать", True)
 
Спасибо большое. Всё так как и нужно.
Страницы: 1
Читают тему
Наверх