Якщо вашій процедурі VBA потрібно запитати у користувача ім’я файлу, ви можете скористатися функцією InputBox і дозволити користувачеві Excel вводити текст. Однак поле введення зазвичай не найкращий інструмент для цієї роботи, оскільки більшості користувачів важко запам’ятати шляхи, зворотну косу риску, імена файлів і розширення файлів. Іншими словами, занадто легко зіпсувати, вводячи ім’я файлу.
Для кращого вирішення цієї проблеми скористайтеся методом GetOpenFilename об’єкта Application, який гарантує, що ваш код отримає дійсне ім’я файлу, включаючи його повний шлях. Метод GetOpenFilename відображає знайоме діалогове вікно «Відкрити» (бездіяльність діалогового вікна Excel відображається, коли ви вибираєте «Файл» → «Відкрити» → «Огляд»).
Метод GetOpenFilename насправді не відкриває вказаний файл. Цей метод просто повертає вибране користувачем ім’я файлу у вигляді рядка. Тоді ви можете написати код, щоб робити все, що хочете, з іменем файлу.
Синтаксис методу GetOpenFilename
Офіційний синтаксис методу GetOpenFilename такий:
object.GetOpenFilename ([fileFilter], [filterIndex],
[назва],[buttonText], [multiSelect])
Метод GetOpenFilename приймає наведені нижче додаткові аргументи.
Аргумент |
Що воно робить |
FileFilter |
Визначає типи файлів, які відображаються в діалоговому вікні
(наприклад, *.TXT). Ви можете вказати кілька фільтрів для
вибору користувача. |
FilterIndex |
Визначає, які фільтри файлів відображаються в діалоговому вікні за
замовчуванням. |
Назва |
Визначає заголовок рядка заголовка діалогового вікна
. |
ButtonText |
Ігнорується (використовується лише для версії Excel для Macintosh). |
MultiSelect |
Якщо True, користувач може вибрати кілька файлів. |
Приклад GetOpenFilename
Аргумент fileFilter визначає те, що з’являється у розкривному списку «Тип файлів» діалогового вікна. Цей аргумент складається з пар рядків фільтра файлів, за якими слідує специфікація фільтра файлу з підстановочними знаками, кожна частина і пара відокремлюються комами. Якщо його опустити, цей аргумент за замовчуванням має таке:
Усі файли (*.*), *.*
Зверніть увагу, що цей рядок складається з двох частин, розділених комою:
Усі файли (*.*)
і
*.*
Першою частиною цього рядка є текст, що відображається у спадному списку Тип файлів. Друга частина визначає, які файли відображатиметься у діалоговому вікні. Наприклад, *.* означає всі файли.
Код у наведеному нижче прикладі відкриває діалогове вікно, яке запитує у користувача ім’я файлу. Процедура визначає п'ять фільтрів файлів. Зверніть увагу, що послідовність продовження рядка VBA використовується для налаштування змінної Filter; це допомагає спростити цей досить складний аргумент.
Sub GetImportFileName ()
Dim Finfo як рядок
Dim FilterIndex As Long
Приглушена назва як рядок
Dim FileName як варіант
' Налаштуйте список фільтрів файлів
FInfo = «Текстові файли (*.txt),*.txt» & _
«Файли Lotus (*.prn),*.prn», & _
«Файли, розділені комами (*.csv),*.csv», & _
«Файли ASCII (*.asc),*.asc», & _
"Усі файли (*.*),*.*"
' Відображати *.* за замовчуванням
Індекс фільтра = 5
' Встановіть заголовок діалогового вікна
Заголовок = «Виберіть файл для імпорту»
' Отримайте ім'я файлу
FileName = Application.GetOpenFilename (FIinfo, _
FilterIndex, Title)
' Обробка інформації про повернення з діалогового вікна
Якщо ім'я файлу = False, то
MsgBox «Файл не вибрано».
Інакше
MsgBox «Ви вибрали» та ім’я файлу
Кінець Якщо
Кінець суб
Ось діалогове вікно, яке відображається Excel, коли ви виконуєте цю процедуру. Зовнішній вигляд може відрізнятися залежно від версії Windows, яку ви використовуєте, і параметрів відображення, які ви встановили.
Метод GetOpen Filename відображає діалогове вікно, яке можна налаштувати, і повертає шлях та ім’я вибраного файлу. Це не відкриває файл.
У реальній програмі ви б зробили щось більш значуще з іменем файлу. Наприклад, ви можете відкрити його, використовуючи такий оператор:
Робочі книги. Відкрийте ім’я файлу
Зверніть увагу, що змінна FileName оголошується як тип даних Variant. Якщо користувач натисне кнопку «Скасувати», ця змінна містить логічне значення (False). В іншому випадку FileName є рядком. Таким чином, використання типу даних Variant обробляє обидві можливості.