Приведенный (на скриншоте ниже) макрос напоминает пример использованный в прошлой статье №139. Разница заключается в том, что пользователь может, удерживая нажатыми клавиши <Shift> и <Ctrl>, выбрать в окне несколько файлов. Заостряю внимание на то, что событие использования кнопки Отмена определяется по наличию переменной массива FileName. Если пользователь не щелкнул на кнопке Отмена, то результирующий массив будет состоять как минимум из одного элемента. В этом примере список выбранных файлов отображается в окне сообщения.
📌 Скачать файл пример, можно в конце статьи.
Рассмотрим процедуру:
Когда параметр MultiSelect равен True, переменная FileName будет массивом, даже если выбран лишь один файл.
Давайте разберём код:
- Sub ПолучитьПутьКФайлам2 () Объявление начала подпрограммы (макроса) с именем " ПолучитьПутьКФайлам2".
- Dim Filt As String
- Dim FilterIndex As Long
- Dim FileName As Variant
- Dim Title As String
- Dim i As Long
- Dim Msg As String
Строки объявляют переменные, которые будут использоваться в коде. Filt- строка, содержащая фильтры для файлов при открытии. FilterIndex - целое число, указывающее на индекс фильтра по умолчанию. FileName - вариантный тип данных, который будет хранить имена выбранных файлов. Title - строка, содержащая заголовок диалогового окна открытия файла. i- целое число, используемое в цикле для итерации по выбранным файлам. Msg - строка, которая будет содержать сообщение с именами выбранных файлов.
- Filt = "Текстовые файлы (*.txt),*.txt," & _
"Файлы Lotus (*.prn),*.prn," & _
"Разделенные запятыми файлы (*.csv),*.csv," & _
"Файлы ASCII (*.asc),*.asc," & _
"Все файлы (*.*),*.*"
Строка определяет фильтры файлов для диалогового окна открытия. Формат: "Название фильтра (*.расширение),*расширение,".
FilterIndex = 5
Устанавливает индекс фильтра по умолчанию. В данном случае это 5, что соответствует "Все файлы (.),.".
Title = "Выберите файл для импорта"
Строка устанавливает заголовок для диалогового окна открытия файла.
- FileName = Application.GetOpenFilename _
(FileFilter:=Filt, _
FilterIndex:=FilterIndex, _
Title:=Title, _
MultiSelect:=True)
Строка вызывает диалоговое окно открытия файла с указанными параметрами и сохраняет выбранные имена файлов в переменную FileName.
- If IsArray(FileName) Then
Оператор проверяет, является ли переменная FileName массивом (то есть были ли выбраны файлы).
- For i = LBound(FileName) To UBound(FileName)
Оператор запускает цикл от нижней границы массива FileName до верхней границы. LBound и UBound используются для получения индексов начала и конца массива соответственно.
- Msg = Msg & FileName(i) & vbNewLine
Оператор выводит сообщение с выбранными файлами.
Else
Если файлы не были выбраны, программа переходит сюда.
- MsgBox "Файлы не выбраны."
Оператор выводит сообщение о том, что файлы не были выбраны.
- End If
Этот оператор завершает условный оператор If.
- End Sub
Завершение подпрограммы (макроса).
Бонусом ещё одна процедура:
Коротко:
Открывает диалоговое окно для выбора папки с помощью метода Application.FileDialog.
Устанавливает начальный путь для диалогового окна в текущий рабочий каталог с помощью свойства InitialFileName.
Устанавливает заголовок для диалогового окна с помощью свойства Title.
Показывает диалоговое окно пользователю с помощью метода Show.
Проверяет, была ли выбрана какая-либо папка. Если нет, выводит сообщение "Отменено". Если да, выводит путь к выбранной папке с помощью свойства SelectedItems.
В сухом остатке, когда вы запускаете этот макрос, он открывает диалоговое окно для выбора папки. Пользователь выбирает папку, и путь к этой папке отображается в сообщении. Если пользователь отменяет выбор папки, выводится сообщение о том, что операция была отменена.