Найти в Дзене
VBA Excel с нуля

VBA Excel № 139. Метод GetOpenFilename (получение имени и полного пути файла)

Как гарантированно получить правильное имя файла и его полный путь? Если программе нужно получить от пользователя название файла, можно использовать функцию InputBox, но этот подход зачастую вызывает ошибки. Более надёжным считаю применение метода «GetOpenFilename» объекта Application, который гарантирует получение правильного имени файла (и его полного пути). Этот метод отображает стандартное диалоговое окно «Открытие документа», но указанный файл не открывается. Вместо этого метод возвращает строку с путём и именем файла, выбранными пользователем. После этого с именем файла можно делать всё что угодно. Application.GetOpenFilename(Фильтр_файла, Индекс_фильтра, Заголовок, Подпись_кнопки, Множественный_выбор) Аргумент «Фильтр_файла» определяет содержимое выпадающего списка «Тип файлов» в окне «Открытие документа». Аргумент состоит из строки, которая определяет отображаемое значение, и строки спецификации типа файлов с групповыми символами, разделёнными запятыми. Если этот аргумент не ук
Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Как гарантированно получить правильное имя файла и его полный путь?

Если программе нужно получить от пользователя название файла, можно использовать функцию InputBox, но этот подход зачастую вызывает ошибки. Более надёжным считаю применение метода «GetOpenFilename» объекта Application, который гарантирует получение правильного имени файла (и его полного пути).

Этот метод отображает стандартное диалоговое окно «Открытие документа», но указанный файл не открывается. Вместо этого метод возвращает строку с путём и именем файла, выбранными пользователем. После этого с именем файла можно делать всё что угодно.

Синтаксис метода:

Application.GetOpenFilename(Фильтр_файла, Индекс_фильтра, Заголовок, Подпись_кнопки, Множественный_выбор)
  • Фильтр_файла — содержит строку с критерием фильтрации файлов (необязательный параметр).
  • Индекс_фильтра — указывает порядковый номер критерия фильтрации файлов по умолчанию (необязательный параметр).
  • Заголовок — содержит заголовок диалогового окна (необязательный параметр). Если его не указывать, будет использован заголовок «Открытие документа».
  • Подпись_кнопки — применяется только на компьютерах Macintosh.
  • Множественный_выбор — необязательный параметр. Если установлен в значение «Истина», можно выбрать несколько имён файлов. По умолчанию имеет значение «Ложь».

Аргумент «Фильтр_файла» определяет содержимое выпадающего списка «Тип файлов» в окне «Открытие документа». Аргумент состоит из строки, которая определяет отображаемое значение, и строки спецификации типа файлов с групповыми символами, разделёнными запятыми. Если этот аргумент не указан, используется значение по умолчанию.

"Все файлы (*.*), *.*"

Первая часть строки Все файлы (*.*) — это текст, который отображается в выпадающем списке типов файлов. Вторая часть строки *.* указывает типы отображаемых файлов.

Затем переменной Filt присваивается строковое значение, которое впоследствии используется как аргумент «Фильтр_файла» метода «GetOpenFilename». В этом случае диалоговое окно предоставляет пользователю возможность выбрать один из четырёх типов файлов (кроме варианта «Все файлы»).

При задании значений переменной Filt, будем использовать оператор конкатенации строк VBA. Этот метод упрощает управление сложными и громоздкими аргументами.

Filt = "Текстовые файлы (*.txt),*.txt," &
"Файлы Lotus (*.prn),*.prn," &
"Файлы, разделенные запятыми (*.csv),*.csv," &
"Файлы ASCII (*.asc),*.asc," &
"Все файлы (*.*),**"

Аргумент «Индекс_фильтра» указывает значение аргумента «Фильтр_файла», установленное по умолчанию. Аргумент «Заголовок» определяет текст, который отображается в заголовке окна. Если опция «Множественный_выбор» имеет значение «Истина», то пользователь может выбрать несколько файлов в окне. Имена всех файлов заносятся в массив.

На скриншоте ниже используется пример, где у пользователя запрашивается имя файла. При этом в поле типа файлов используются пять фильтров.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

📌 Скачать файл пример, можно в конце статьи.

На скриншоте ниже показано диалоговое окно, которое выводится на экран после выполнения этой процедуры и выбора фильтра "Все файлы (*.*),*.*" (можно выбрать "Текстовые файлы (*.txt) ").

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Как видно метод GetOpenFilename отобразило диалоговое окно, в котором выбирается файл.

Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Как всегда, на макрос я назначил кнопку.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

СКАЧАТЬ ФАЙЛ ПРИМЕР

В следующей статье рассмотрим, как в диалоговом окне можно выбрать не один, а несколько файлов.