Диалоговое окно выбора файла VBA

Обновлено: 21.11.2024

В Microsoft Excel или Access иногда может потребоваться ввод данных пользователем относительно местоположения файла. Например, вам может потребоваться экспортировать некоторые данные в Access, но нужно указать пользователю, где эти данные должны быть сохранены.

Для этого примера мы создадим простую форму доступа с одной кнопкой. Хотя здесь мы используем Access, основную логику можно использовать из VBA в любом продукте Microsoft (например, Excel, Word).

1. Создать кнопку

Создайте базовую форму и добавьте кнопку.

Чтобы добавить код к событию этой кнопки, перейдите на страницу свойств->Событие для новой кнопки и нажмите . для события On Click. Во всплывающем окне «Выбрать построитель» выберите «Построитель кода».

2. Импорт необходимого справочника по VBA

Импортируйте ссылку VBA, необходимую для использования диалогового окна файла, выбрав Сервис->Ссылки в меню редактора VBA.

<Р> 2016 12 16 доступ добавить ссылку на офис 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
ExternalFileName = Application.GetOpenFilename(FileFilter:="Excel Files,*.xl*,Text Files,*.txt;*.csv", MultiSelect:=True)< /эм>

При нажатии кнопки "Открыть" назначенная переменная будет иметь массив имен файлов с путями. Распространенным сценарием является использование цикла для доступа к каждому имени файла.

For i = LBound(ExternalFileName) To UBound(ExternalFileName)
Workbooks.Open ExternalFileName(i)
Следующий i

Вы можете ознакомиться со статьей Все, что вам нужно знать о том, как создать цикл VBA в Excel, чтобы узнать больше о циклах.

Перед запуском необходимо открыть окно VBA (Visual Basic для приложений) и добавить модуль. Модуль — это место, где вы можете писать код.

Если вы не знакомы с макросами и VBA, просто ознакомьтесь с руководством Как создать макрос в Excel для быстрого старта.

Открыть одну книгу

Следующий код отображает диалоговое окно «Открыть файл» для Excel и некоторых текстовых файлов, позволяя выбрать только один файл. После того как имя файла и путь заданы в переменной string, код может скопировать содержимое из открытого файла в существующий файл. Вы можете просто скопировать этот код и вставить свой VBA.

Sub SingleFile()
'Отключить обновления экрана, чтобы скрыть транзакции окна
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

Примечание. GetFilenameFromPath — это пользовательская функция, которая анализирует имя файла из полного пути. Вы можете найти его код в файле примера.

Часто в VBA нам нужно попросить пользователей выбрать файлы или каталоги, прежде чем мы выполним реальную функциональность нашего макроса. Добро пожаловать в сообщение о диалоговом окне открытия файла VBA. Сегодня мы узнаем, как использовать Application.FileDialog, чтобы понять различные параметры выбора файла msoFileDialogFilePicker и как правильно управлять этими диалогами.

Вот простой пример диалогового окна файла VBA:

Функция FileDialog приложения

Прежде чем мы начнем, давайте разберемся с функцией Application.FileDialog.

Приложение.FileDialog имеет следующий синтаксис:

Параметр

MsoFileDialogType
Перечисление, определяющее тип открываемого диалогового окна файла. Он имеет следующие значения:

td>
Значение Описание
msoFileDialogOpen Открыть диалоговое окно
msoFileDialogSaveAs Диалоговое окно «Сохранить как»
msoFileDialogFilePicker Диалоговое окно выбора файлов
msoFileDialogFolderPicker Диалоговое окно выбора папки

Свойства и функции

Свойства FileDialog

Свойство Описание
AllowMultiSelect Разрешить выбор нескольких файлов или папок< /td>
ButtonName Текст, отображаемый на кнопке действия диалогового окна файла
DialogType Изменить MsoFileDialogType (см. выше)
Фильтр Установить файловый фильтр для фильтрации типов файлов, которые может выбирать пользователь
InitialFileName Первоначальный путь, который нужно открыть, например C:\
InitialView Исходное представление файла. Может быть одним из следующих:
  • мсофиледиалогвиевдетаилс
  • мсофиледиалогвиевларгеиконс
  • мсофиледиалогвиевлист
  • мсофиледиалогвиевпревью
  • мсофиледиалогвиевпропертиес
  • мсофиледиалогвиевсмалликонс
  • MsoFileDialogViewThumbnail
  • мсофиледиалогвиеввебвиев

Выбрать файлы — msoFileDialogFilePicker

Диалоговый тип msoFileDialogFilePicker позволяет выбрать один или несколько файлов.

Выбрать отдельные файлы

В наиболее распространенном сценарии выбора файла пользователю предлагается выбрать один файл. Код ниже делает именно это:

Выбрать несколько файлов

Довольно частым является сценарий, когда вы просите пользователя выбрать один или несколько файлов. Код ниже делает именно это. Обратите внимание, что для параметра AllowMultiSelect необходимо установить значение True.

Выберите папку — msoFileDialogFilePicker

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

Выберите пример папки

В приведенном ниже диалоговом окне пользователю будет предложено выбрать папку:

Диалоговое окно msoFileDialogFolderPicker позволяет выбрать только ОДНУ папку и, очевидно, не поддерживает папки с файлами

Открыть файл – msoFileDialogOpen

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

Пример открытия файла

В приведенном ниже диалоговом окне пользователю будет предложено выбрать файл для открытия:

Сохранить файл – msoFileDialogSaveAs

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

Диалоговое окно сохранения файла на самом деле не сохраняет никаких файлов! Это просто позволит пользователю выбрать имя файла для файла. Вам нужно открыть файлы для чтения/записи самостоятельно. Посмотрите мой пост о том, как писать файлы в VBA

Пример сохранения файла

В приведенном ниже диалоговом окне пользователю будет предложено выбрать путь для сохранения файлов:

Фильтры FileDialog

Одной из распространенных проблем при работе с диалоговым окном Application.FileDialog является установка нескольких файловых фильтров. Ниже приведены некоторые распространенные примеры того, как это сделать правильно. Чтобы добавить фильтр для нескольких файлов, используйте полуцвет ; :

Каждый раз обязательно очищайте список фильтров. FileDialog имеет свои недостатки, и часто фильтры не очищаются автоматически. Следовательно, при создании нескольких диалоговых окон вы можете увидеть фильтры из предыдущих запущенных диалоговых окон, если они не очищены и не запущены повторно должным образом.

Диалоговое окно открытия файла на самом деле не открывает никаких файлов! Это просто позволит пользователю выбирать файлы для открытия. Вам нужно открыть файлы для чтения/записи самостоятельно. Посмотрите мои сообщения:

В макросе или надстройке могут быть случаи, когда вам нужно, чтобы пользователь выбрал файл. Для этой цели можно использовать стандартное диалоговое окно FileDialog. Следующий код предназначен для предоставления наиболее распространенных настроек, которые вы можете изменить в соответствии со своими потребностями.

Открыть диалоговое окно файла для выбора файла

Выбор нескольких файлов

Если пользователю разрешено выбирать более одного файла, можно использовать следующий код:

Настройка параметров папки по умолчанию

Имя файла или полный путь к файлу

Иногда вам нужен полный путь к файлу выбранного элемента

В других случаях вам просто нужно имя файла (а не папки).
Получите нашу БЕСПЛАТНУЮ электронную книгу VBA с 30 наиболее полезными макросами Excel VBA.

Автоматизируйте Excel, чтобы сэкономить время и перестать выполнять работу, которую могла бы выполнять обученная обезьяна.

Не забывайте:

Если вы нашли этот пост полезным или у вас есть лучший подход, оставьте комментарий ниже.

Вам нужна помощь в адаптации этого к вашим потребностям?

Я предполагаю, что примеры в этом посте не совсем соответствуют вашей ситуации. Мы все используем Excel по-разному, поэтому невозможно написать пост, который удовлетворит потребности всех. Потратив время на изучение методов и принципов, изложенных в этом посте (и в других местах на этом сайте), вы сможете адаптировать его к своим потребностям.

  1. Читайте другие блоги или смотрите видео на YouTube по той же теме. Вы получите гораздо больше пользы, найдя собственные решения.
  2. Спросите «Excel Ninja» в вашем офисе. Удивительно, какие вещи знают другие люди.
  3. Задайте вопрос на форуме, таком как Mr Excel, или в сообществе Microsoft Answers. Помните, что люди на этих форумах обычно отдают свое время бесплатно. Поэтому постарайтесь сформулировать свой вопрос, убедитесь, что он четкий и лаконичный. Перечислите все, что вы пробовали, и предоставьте скриншоты, сегменты кода и примеры книг.
  4. Используйте Excel Rescue, моего партнера-консультанта. Они помогают решить небольшие проблемы с Excel.

Что дальше?
Пока не уходите, в Excel Off The Grid есть чему поучиться. Ознакомьтесь с последними сообщениями:

Читайте также: