Диалоговое окно выбора файла VBA
Обновлено: 21.11.2024
В Microsoft Excel или Access иногда может потребоваться ввод данных пользователем относительно местоположения файла. Например, вам может потребоваться экспортировать некоторые данные в Access, но нужно указать пользователю, где эти данные должны быть сохранены.
Для этого примера мы создадим простую форму доступа с одной кнопкой. Хотя здесь мы используем Access, основную логику можно использовать из VBA в любом продукте Microsoft (например, Excel, Word).
1. Создать кнопку
Создайте базовую форму и добавьте кнопку.
Чтобы добавить код к событию этой кнопки, перейдите на страницу свойств->Событие для новой кнопки и нажмите . для события On Click. Во всплывающем окне «Выбрать построитель» выберите «Построитель кода».
2. Импорт необходимого справочника по VBA
Импортируйте ссылку VBA, необходимую для использования диалогового окна файла, выбрав Сервис->Ссылки в меню редактора VBA.
<Р>Прокрутите вниз до элемента библиотеки объектов Microsoft Office «ВЕРСИЯ» (версия Office может отличаться), отметьте его и нажмите «ОК».
3. Написать код события
Добавьте приведенный ниже код в процедуру события нажатия кнопки.
4. Кнопка тестирования
Сохраните код, вернитесь к форме и нажмите кнопку. Вы должны увидеть диалоговое окно файла. Выберите свой файл, и вы должны увидеть, что код VBA может ссылаться на его путь.
Подробнее о VBA
Создание простой функции VBA в Excel
02 декабря 2019 г. — 2 минуты чтения
Экспорт данных Microsoft Access в Excel
02 декабря 2019 г. — 3 минуты чтения
Экспорт данных Microsoft Access в Excel
02 декабря 2019 г. — 4 минуты чтения
Подсчет экземпляров строки в нескольких файлах с помощью Python
Сегодня утром я столкнулся с задачей, требующей подсчета всех экземпляров определенного элемента в нескольких XML-файлах в каталоге…
Экспорт данных Microsoft Access в Excel
В этом примере мы будем использовать простую таблицу со списком названий пива. Наша цель — экспортировать содержимое этой таблицы в Excel…
Excel VBA позволяет открывать книгу напрямую. Все, что вам нужно, это указать полный путь к файлу, включая имя файла. Однако каждый раз находить и указывать путь к файлу может быть утомительно при работе с несколькими файлами. В этом руководстве мы покажем вам, как отобразить диалоговое окно открытия файла в VBA.
Открытие книги в VBA
Вы можете открывать рабочие книги в VBA с помощью метода Workbooks.Open. Этот метод принимает пятнадцать необязательных аргументов, включая имя файла книги, которую вы хотите открыть.
Workbooks.Open (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
Укажите в имени файла полный путь, чтобы открыть книгу.
Workbooks.Open Filename:="C:\My Documents\June\Income.xlsx"
Любая строка кода может открыть книгу по указанному пути. Открытая книга становится активной книгой.
Ознакомьтесь с другими необязательными аргументами, чтобы определить способ открытия книги, например, в режиме только для чтения, путем обновления внешних ссылок или с помощью пароля. Вот документация.
Отображение диалогового окна открытия файла
Диалог открытия файла может вернуть имя файла, которое необходимо для Workbooks.Open, вместе с его путем. Чтобы отобразить диалоговое окно открытия файла, необходимо вызвать метод Application.GetOpenFilename.
Метод Application.GetOpenFilename может принимать пять необязательных аргументов, с помощью которых можно выбрать допустимые типы файлов, заголовок диалогового окна или разрешить выбор нескольких файлов.
Чтобы открыть диалоговое окно в состоянии по умолчанию (без какой-либо фильтрации и возможности выбора одного файла), используйте его без каких-либо аргументов. Назначьте команду строковой переменной, чтобы установить переменную с полным путем к выбранному файлу.
Затемнение FullFileName как строки
FullFileName = Application.GetOpenFilename
Фильтр файлов
С другой стороны, применение фильтра может помочь конечному пользователю предоставить только те файлы, которые ему нужны. Вы можете использовать FileFilter для установки фильтров в диалоговом окне "Открыть файл".
Аргумент FileFilter принимает специальную строку, определяющую критерии фильтрации файлов.Типы файлов необходимо указывать в виде пар понятное имя — тип файла. Каждая пара, имя и тип разделяются запятой (,).
понятное имя 1, тип файла 1 , понятное имя 2, тип файла 2, …
Если понятное имя охватывает несколько типов, используйте символы точки с запятой для разделения типов файлов:
понятное имя 1, тип файла 1; тип файла 2; тип файла …, понятное имя 2, тип файла 4; тип файла 5; тип файла …, …
Вот пример отображения диалогового окна, которое принимает только файлы Excel.
FullFileName = Application.GetOpenFilename(FileFilter:="Excel Files,*.xl*")
В следующем примере показан сценарий на снимке экрана выше, в котором в качестве фильтров отображаются два элемента:
ExternalFileName = Application.GetOpenFilename(FileFilter:="Excel Files,*.xl*;*.xm*,Text Files,*.txt;*.csv")
Несколько файлов
Другой важной особенностью диалогового окна "Открыть файл" является возможность выбора нескольких файлов. Если для аргумента MultiSelect задано значение True, диалоговое окно «Открыть файл» возвращает имя каждого выбранного файла в массиве. Таким образом, вам нужно назначить диалог переменной типа Variant вместо String.
Dim ExternalFileName As Variant
При нажатии кнопки "Открыть" назначенная переменная будет иметь массив имен файлов с путями. Распространенным сценарием является использование цикла для доступа к каждому имени файла. For i = LBound(ExternalFileName) To UBound(ExternalFileName) Вы можете ознакомиться со статьей Все, что вам нужно знать о том, как создать цикл VBA в Excel, чтобы узнать больше о циклах. Перед запуском необходимо открыть окно VBA (Visual Basic для приложений) и добавить модуль. Модуль — это место, где вы можете писать код. Если вы не знакомы с макросами и VBA, просто ознакомьтесь с руководством Как создать макрос в Excel для быстрого старта. Следующий код отображает диалоговое окно «Открыть файл» для Excel и некоторых текстовых файлов, позволяя выбрать только один файл. После того как имя файла и путь заданы в переменной string, код может скопировать содержимое из открытого файла в существующий файл. Вы можете просто скопировать этот код и вставить свой VBA. Sub SingleFile() 'Определить и установить переменные 'Вызвать диалог открытия файла 'Открыть указанный файл и выполнить код 'Повторно активировать оповещения и обновления экрана
Примечание. GetFilenameFromPath — это пользовательская функция, которая анализирует имя файла из полного пути. Вы можете найти его код в файле примера.
Часто в VBA нам нужно попросить пользователей выбрать файлы или каталоги, прежде чем мы выполним реальную функциональность нашего макроса. Добро пожаловать в сообщение о диалоговом окне открытия файла VBA. Сегодня мы узнаем, как использовать Application.FileDialog, чтобы понять различные параметры выбора файла msoFileDialogFilePicker и как правильно управлять этими диалогами. Вот простой пример диалогового окна файла VBA: Прежде чем мы начнем, давайте разберемся с функцией Application.FileDialog. Приложение.FileDialog имеет следующий синтаксис: MsoFileDialogType
ExternalFileName = Application.GetOpenFilename(FileFilter:="Excel Files,*.xl*,Text Files,*.txt;*.csv", MultiSelect:=True)< /эм>р>
Workbooks.Open ExternalFileName(i)
Следующий iОткрыть одну книгу
'Отключить обновления экрана, чтобы скрыть транзакции окна
Application.ScreenUpdating = False
'Игнорировать предупреждения, такие как сообщение о большом объеме данных, при копировании
>Application.DisplayAlerts = False
Dim PrimaryFileName As String, ExternalFileName As String
PrimaryFileName = ThisWorkbook.Name
ExternalFileName = Application.GetOpenFilename(FileFilter:="Excel Files,*.xl*,Text Files,*.txt;*.csv")
'Завершить макрос если файл не выбран
Если ExternalFileName = False Then
MsgBox «Вы не выбрали файл»
Выход из подпункта
Конец, если
Workbooks.Open ExternalFileName
Range("A1:G20").Copy 'Копировать диапазон из внешнего файла
Windows(PrimaryFileName).Activate 'Активировать основной файл
Sheets.Add After:=ActiveSheet 'Добавить новый лист
ActiveSheet.Paste 'Вставить в новый лист
Workbooks(GetFilenameFromPath(ExternalFileName)). Закрыть SaveChanges:=False 'Закрыть внешний файл без сохранения
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End SubФункция FileDialog приложения
Параметр
Перечисление, определяющее тип открываемого диалогового окна файла. Он имеет следующие значения:
Значение Описание msoFileDialogOpen Открыть диалоговое окно msoFileDialogSaveAs Диалоговое окно «Сохранить как» msoFileDialogFilePicker Диалоговое окно выбора файлов td> msoFileDialogFolderPicker Диалоговое окно выбора папки
Свойства и функции
Свойства FileDialog
Свойство | Описание |
---|---|
AllowMultiSelect | Разрешить выбор нескольких файлов или папок< /td> |
ButtonName | Текст, отображаемый на кнопке действия диалогового окна файла |
DialogType | Изменить MsoFileDialogType (см. выше) |
Фильтр | Установить файловый фильтр для фильтрации типов файлов, которые может выбирать пользователь | tr>
InitialFileName | Первоначальный путь, который нужно открыть, например C:\ |
InitialView | Исходное представление файла. Может быть одним из следующих: |
- мсофиледиалогвиевдетаилс
- мсофиледиалогвиевларгеиконс
- мсофиледиалогвиевлист
- мсофиледиалогвиевпревью
- мсофиледиалогвиевпропертиес
- мсофиледиалогвиевсмалликонс
- MsoFileDialogViewThumbnail
- мсофиледиалогвиеввебвиев
Выбрать файлы — msoFileDialogFilePicker
Диалоговый тип msoFileDialogFilePicker позволяет выбрать один или несколько файлов.
Выбрать отдельные файлы
В наиболее распространенном сценарии выбора файла пользователю предлагается выбрать один файл. Код ниже делает именно это:
Выбрать несколько файлов
Довольно частым является сценарий, когда вы просите пользователя выбрать один или несколько файлов. Код ниже делает именно это. Обратите внимание, что для параметра AllowMultiSelect необходимо установить значение True.
Выберите папку — msoFileDialogFilePicker
Выбрать папку проще, чем выбрать файлы. Однако в одном диалоговом окне можно выбрать только одну папку.
Выберите пример папки
В приведенном ниже диалоговом окне пользователю будет предложено выбрать папку:
Диалоговое окно msoFileDialogFolderPicker позволяет выбрать только ОДНУ папку и, очевидно, не поддерживает папки с файлами
Открыть файл – msoFileDialogOpen
Открывать файлы намного проще, так как обычно это один файл. Единственная разница между поведением при выборе и открытии файлов заключается в метках кнопок.
Пример открытия файла
В приведенном ниже диалоговом окне пользователю будет предложено выбрать файл для открытия:
Сохранить файл – msoFileDialogSaveAs
Сохранить файл так же просто, только кнопки имеют другие названия.
Диалоговое окно сохранения файла на самом деле не сохраняет никаких файлов! Это просто позволит пользователю выбрать имя файла для файла. Вам нужно открыть файлы для чтения/записи самостоятельно. Посмотрите мой пост о том, как писать файлы в VBA
Пример сохранения файла
В приведенном ниже диалоговом окне пользователю будет предложено выбрать путь для сохранения файлов:
Фильтры FileDialog
Одной из распространенных проблем при работе с диалоговым окном Application.FileDialog является установка нескольких файловых фильтров. Ниже приведены некоторые распространенные примеры того, как это сделать правильно. Чтобы добавить фильтр для нескольких файлов, используйте полуцвет ; :
Каждый раз обязательно очищайте список фильтров. FileDialog имеет свои недостатки, и часто фильтры не очищаются автоматически. Следовательно, при создании нескольких диалоговых окон вы можете увидеть фильтры из предыдущих запущенных диалоговых окон, если они не очищены и не запущены повторно должным образом.
Диалоговое окно открытия файла на самом деле не открывает никаких файлов! Это просто позволит пользователю выбирать файлы для открытия. Вам нужно открыть файлы для чтения/записи самостоятельно. Посмотрите мои сообщения:
В макросе или надстройке могут быть случаи, когда вам нужно, чтобы пользователь выбрал файл. Для этой цели можно использовать стандартное диалоговое окно FileDialog. Следующий код предназначен для предоставления наиболее распространенных настроек, которые вы можете изменить в соответствии со своими потребностями.
Открыть диалоговое окно файла для выбора файла
Выбор нескольких файлов
Если пользователю разрешено выбирать более одного файла, можно использовать следующий код:
Настройка параметров папки по умолчанию
Имя файла или полный путь к файлу
Иногда вам нужен полный путь к файлу выбранного элемента
В других случаях вам просто нужно имя файла (а не папки).
Получите нашу БЕСПЛАТНУЮ электронную книгу VBA с 30 наиболее полезными макросами Excel VBA.
Автоматизируйте Excel, чтобы сэкономить время и перестать выполнять работу, которую могла бы выполнять обученная обезьяна.
Не забывайте:
Если вы нашли этот пост полезным или у вас есть лучший подход, оставьте комментарий ниже.
Вам нужна помощь в адаптации этого к вашим потребностям?
Я предполагаю, что примеры в этом посте не совсем соответствуют вашей ситуации. Мы все используем Excel по-разному, поэтому невозможно написать пост, который удовлетворит потребности всех. Потратив время на изучение методов и принципов, изложенных в этом посте (и в других местах на этом сайте), вы сможете адаптировать его к своим потребностям.
- Читайте другие блоги или смотрите видео на YouTube по той же теме. Вы получите гораздо больше пользы, найдя собственные решения.
- Спросите «Excel Ninja» в вашем офисе. Удивительно, какие вещи знают другие люди.
- Задайте вопрос на форуме, таком как Mr Excel, или в сообществе Microsoft Answers. Помните, что люди на этих форумах обычно отдают свое время бесплатно. Поэтому постарайтесь сформулировать свой вопрос, убедитесь, что он четкий и лаконичный. Перечислите все, что вы пробовали, и предоставьте скриншоты, сегменты кода и примеры книг.
- Используйте Excel Rescue, моего партнера-консультанта. Они помогают решить небольшие проблемы с Excel.
Что дальше?
Пока не уходите, в Excel Off The Grid есть чему поучиться. Ознакомьтесь с последними сообщениями:
Читайте также: