Как открыть диалоговое окно в excel

Обновлено: 05.07.2024

На этом шаге мы рассмотрим диалоговое окно Открытие документа .

Чтобы открыть рабочую книгу в диалоговом окне Открытие документа (рис. 1), необходимо указать имя файла рабочей книги (в поле Имя файла ) и папку, где он находится (в поле Папка ).


Рис. 1. Диалоговое окно Открытие документа

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

  • Открыть . Открывает файл в "обычном режиме".
  • Открыть только для чтения . Открывает файл в режиме "только для чтения". В этом режиме нельзя сохранить изменения, сделанные в открытом файле.
  • Открыть как копию . Открывает копию выбранного файла. Если имя файла Бюджет.xls , то имя открытой книги будет Коп Бюджет.xls .
  • Открыть в обозревателе . Открывает файл в обозревателе Web .

Примечание . Вы можете выделить несколько файлов рабочих книг, удерживая нажатой клавишу Ctrl . После щелчка на кнопке Открыть все выделенные файлы рабочих книг откроются.

Щелкнув правой кнопкой мыши на имени файла в диалоговом окне Открытие документа , можно открыть контекстное меню с множеством дополнительных команд. Например, с их помощью можно скопировать файл, удалить его, изменить его свойства и т.д.

Поле Папка является раскрывающимся списком. Щелчок на кнопке раскрытия списка приводит к раскрытию окна, в котором отображаются системные компоненты компьютера. В этом списке можно выбрать другой диск или каталог.

Кнопка Переход на один уровень вверх позволяет переместиться на один уровень вверх в иерархии папок. Также можно щелкнуть на одной из больших кнопок, расположенных на панели в левой части диалогового окна Открытие документа . После этого может быть получен доступ к следующим папкам:

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

Файлы в диалоговом окне Открытие документа могут отображаться в одном из четырех режимов. Для изменения режима отображения можно воспользоваться кнопкой Представления (рис. 2).


Рис. 2. Кнопка Представление

  • Список . Имена файлов отображаются в виде списка в нескольких колонках.
  • Таблица . Имена файлов отображаются в виде списка с информацией о каждом файле (размер файла, его тип и время последнего изменения).
  • Свойства . Имена файлов отображаются в виде списка с выводом свойств выделенного файла в отдельном окне.
  • Просмотр . Имена файлов отображаются в виде списка с демонстрацией содержимого выделенного файла в отдельном окне предварительного просмотра.

Открыв меню Сервис (рис. 3), расположенное справа в верхней части окна Открытие документа , будет отображено контекстное меню, содержащее следующие команды:


Рис. 3. Меню Сервис

  • Найти . Открывает новое диалоговое окно, позволяющее провести поиск конкретных файлов.
  • Удалить . Удаляет выбранные файлы.
  • Переименовать . Позволяет переименовать выбранный файл.
  • Печать . Открывает выбранный файл, печатает его содержимое и закрывает его.
  • Добавить в папку "Избранное" . Добавляет в папку Избранное ярлык для выделенного файла.
  • Подключить сетевой диск . Открывается диалоговое окно, позволяющее подключить сетевой диск или каталог к выбранному локальному устройству.
  • Свойства . Открывается диалоговое окно свойств выделенного файла. Это позволяет просмотреть или изменить свойства файла, не открывая сам файл.

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

Добрый день! В этом уроке начинаем рассматривать работу с диалоговыми окнами. Далее будет еще один урок на эту тему. Я специально не стал их объединять чтобы не превратить все в кашу. Начнем с простого.

Выполнение многих команд Excel приводит к появлению на экране диалоговых окон.

С помощью диалогового окна Excel получает дополнительную информацию о выбранной вами команде. Например, если вы выбрали команду Рецензирование - Изменения- Защитить лист, то Excel не сможет выполнить эту команду до тех пор, пока не узнает, какую часть рабочего листа необходимо защитить от изменений. Поэтому при выборе данной команды Excel отобразит диалоговое окно Защита листа, показанное на рис. 1.

Рисунок 1.. Excel использует диалоговые окна для получения дополнительной информации от пользователя

В Excel присутствуют диалоговые окна двух основных типов:

■ Обычные диалоговые окна. Такие окна называются модальными. Если открыто диалоговое окно такого типа, то вы не сможете выполнять в рабочей книге никакие другие операции до тех пор, пока не закроете его. Когда в ответ на введенную вами команду появляется такое диалоговое окно, вы должны установить ряд дополнительных параметров с помощью его элементов управления. Сделав это, для продолжения работы щелкните на кнопке ОК или нажмите клавишу <Enter>. Если передумаете, щелкните на кнопке Отмена или нажмите клавишу <Esc> — тогда ничего не произойдет, словно диалоговое окно и не появлялось. Большинство диалоговых окон в Excel является окнами этого типа.

■ Незакрывающиеся диалоговые окна. Такие окна называются немодальными. Они подобны панелям инструментов — если окно открыто, то вы можете продолжать работать в Excel, а окно будет по-прежнему открытым. Установка параметров в таких диалоговых окнах приводит к немедленному выполнению каких-либо действий Excel (не требуется нажимать клавишу <Enter>). Например, если вы занимаетесь форматированием диаграмм, то результат задания каких-либо параметров в диалоговом окне Формат немедленно отображается на диаграмме. Немодальные диалоговые окна вместо кнопки ОК имеют кнопку Закрыть.

В этой заметке описываются методы создания пользовательских диалоговых окон, которые существенно расширяют стандартные возможности Excel. Диалоговые окна – это наиболее важный элемент пользовательского интерфейса в Windows. Они применяются практически в каждом приложении Windows, и большинство пользователей неплохо представляет, как они работают. Разработчики Excel создают пользовательские диалоговые окна с помощью пользовательских форм (UserForm). Кроме того, в VBA имеются средства, обеспечивающие создание типовых диалоговых окон.[1]


Рис. 1. Работа процедуры GetName

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

Использование окон ввода данных

Окно ввода данных — это простое диалоговое окно, которое позволяет пользователю ввести одно значение. Например, можно применить окно ввода данных, чтобы предоставить пользователю возможность ввести текст, число или диапазон значений. Для создания окна ввода предназначены две функции InputBox: одна— в VBA, а вторая является методом объекта Application.

Функция InputBox в VBA

Функция имеет следующий синтаксис:

InputBox(запрос [, заголовок] [, по_умолчанию] [, xpos] [, ypos] [, справка, раздел])

  • Запрос. Указывает текст, отображаемый в окне ввода (обязательный параметр).
  • Заголовок. Определяет заголовок окна ввода (необязательный параметр).
  • По_умолчанию. Задает значение, которое отображается в окне ввода по умолчанию (необязательный параметр).
  • xpos, ypos. Определяют координаты верхнего левого угла окна ввода на экране (необязательные параметры).
  • Справка, раздел. Указывают файл и раздел в справочной системе (необязательные параметры).

Функция InputBox запрашивает у пользователя одно значение. Она всегда возвращает строку, поэтому результат нужно будет преобразовать в числовое значение. Текст, отображаемый в окне ввода, может достигать 1024 символов (длину допускается изменять в зависимости от ширины используемых символов). Если определить раздел справочной системы, то в диалоговом окне будет отображена кнопка Справка.

Обратите внимание: функция InputBox вызывается в цикле Do Until. Это позволяет убедиться в том, что данные введены в окно. Если пользователь щелкнет на кнопке Отмена или не введет текст, то переменная UserName будет содержать пустую строку, а окно ввода данных появится повторно. Далее в процедуре будет предпринята попытка получить имя пользователя путем поиска первого символа пробела (для этого применяется функция InStr). Таким образом, можно воспользоваться функцией Left для получения всех символов, расположенных слева от символа пробела. Если символ пробела не найден, то используется все введенное имя.

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

В процедуре GetWord пользователю предлагается ввести пропущенное слово (рис. 2). Этот пример также иллюстрирует применение именованных аргументов (р и t). Текст запроса выбирается из ячейки А1 рабочего листа.

Рис. 2. Использование функции VBA inputBox, отображающей запрос

Метод Excel InputBox

Метод Excel InputBox по сравнению с функцией VBA InputBox предоставляет три преимущества:

  • возможность задать тип возвращаемого значения;
  • возможность указать диапазон листа путем выделения с помощью мыши;
  • автоматическая проверка правильности введенных данных.

Метод InputBox имеет следующий синтаксис.

InputBox(запрос, [, заголовок], [, по_умолчанию], [, слева], [, сверху], [, справка, раздел], [, тип])

  • Запрос. Указывает текст, отображаемый в окне ввода (обязательный параметр).
  • Заголовок. Определяет заголовок окна ввода (необязательный параметр).
  • По_умолчанию. Задает значение, которое отображается в окне ввода по умолчанию (необязательный параметр).
  • Слева, сверху. Определяют координаты верхнего левого угла окна ввода на экране (необязательные параметры).
  • Справка, раздел. Указывают файл и раздел в справочной системе (необязательные параметры).
  • Тип. Указывает код типа данных, который будет возвращаться методом (необязательный параметр; значения см. рис. 3).


Рис. 3. Коды типов данных, возвращаемые методом Excel InputBox

Используя сумму приведенных выше значений, можно возвратить несколько типов данных. Например, для отображения окна ввода, которое принимает текстовый или числовой тип данных, установите код равным 3 (1 + 2 или число + текст). Если в качестве кода типа данных применить значение 8, то пользователь сможет ввести в поле адрес ячейки или диапазона ячеек. Пользователь также можент выбрать диапазон на текущем рабочем листе.

В процедуре EraseRange используется метод InputBox. Пользователь может указать удаляемый диапазон (рис. 4). Адрес диапазона вводится в окно вручную, или выделяется мышью на листе. Метод InputBox с кодом 8 возвращает объект Range (обратите внимание на ключевое слово Set). После этого выбранный диапазон очищается (с помощью метода Clear). По умолчанию в поле окна ввода отображается адрес текущей выделенной ячейки. Если в окне ввода щелкнуть на кнопке Отмена, то оператор On Error завершит процедуру.


Рис. 4. Пример использования метода InputBox для выбора диапазона

Рис. 5. Метод InputBox автоматически проверяет вводимые данные

Функция VBA MsgBox

MsgBox(запрос[, кнопки][, заголовок][, справка, раздел])

Рис. 6. Константы и значения, используемые для выбора кнопок в функции MsgBox


Рис. 7. Константы, возвращаемые MsgBox

Функция MsgBox возвращает переменную, имеющую тип Integer. Вам необязательно использовать переменную для хранения результата выполнения функции MsgBox. Следующая процедура представляет собой вариацию процедуры GetAnswer.

В файле VBA msgbox.xlsm функция ContinueProcedure в демонстрационных целях представлена в виде процедуры. Функция ContinueProcedure может вызываться из другой процедуры. Например, оператор

If Not ContinueProcedure() Then Exit Sub


Метод Excel GetOpenFilename

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

Application.GetOpenFilename(фильтр_файла, индекс_фильтра, заголовок, множественный_выбор)

  • Фильтр_файла. Содержит строку, определяющую критерий фильтрации файлов (необязательный параметр).
  • Индекс_фильтра. Указывает индексный номер того критерия фильтрации файлов, который используется по умолчанию (необязательный параметр).
  • Заголовок. Содержит заголовок диалогового окна (необязательный параметр). Если этот параметр не указать, то будет использован заголовок Открытие документа.
  • Множественный_выбор. Необязательный параметр. Если он имеет значение ИСТИНА, можно выбрать несколько имен файлов. Имя каждого файла заносится в массив. По умолчанию данный параметр имеет значение ЛОЖЬ.

Аргумент Фильтр_файла определяет содержимое раскрывающегося списка Тип файлов, находящегося в окне Открытие документа. Аргумент состоит из строки, определяющей отображаемое значение, а также строки действительной спецификации типа файлов, в которой находятся групповые символы. Оба элемента аргумента разделены запятыми. Если этот аргумент не указывать, то будет использовано значение, заданное по умолчанию: " Все файлы (*.*),*.* " . Первая часть строки Все файлы (*.*) – то текст, отображаемый в раскрывающемся списке тип файлов. Вторая часть строки *.* указывает тип отображаемых файлов.

В следующих инструкциях переменной Filt присваивается строковое значение. Эта строка впоследствии используется в качестве аргумента фильтр_файла метода GetOpenFilename. В данном случае диалоговое окно предоставит пользователю возможность выбрать один из четырех типов файлов (кроме варианта Все файлы). Если задать значение переменной Filt, то будет использоваться оператор конкатенации строки VBA. Этот способ упрощает управление громоздкими и сложными аргументами.

В следующем примере у пользователя запрашивается имя файла. При этом в поле типа файлов используются пять фильтров (код содержится в файле prompt for file.xlsm).

На рис. 11 показано диалоговое окно, которое выводится на экран после выполнения этой процедуры (по умолчанию предлагается фильтр *.csv).


Рис. 11. Метод GetOpenFilename отображает диалоговое окно, в котором выбирается файл

Обратите внимание: переменная FileName определена как массив переменного типа (а не как строка в предыдущем примере). Причина заключается в том, что потенциально FileName может содержать массив значений, а не только одну строку.

Метод Excel GetSaveAsFilename

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

Application.GetSaveAsFilename(начальное_имя, фильтр_файла, индекс_фильтра, заголовок, текст_кнопки)

  • Начальное_имя. Указывает предполагаемое имя файла.
  • Фильтр_файла. Содержит критерий фильтрации отображаемых в окне файлов.
  • Индекс_фильтра. Код критерия фильтрации файлов, который используется по умолчанию.
  • Заголовок. Определяет текст заголовка диалогового окна.

Получение имени папки

With Application . FileDialog ( msoFileDialogFolderPicker )

Объект FileDialog позволяет определить начальную папку путем указания значения свойства InitialFileName. В примере в качестве начальной папки применяется путь к файлам Excel, заданный по умолчанию.

Отображение диалоговых окон Excel

Создаваемый вами код VBA может вызывать на выполнение многие команды Excel, находящиеся на ленте. И если в результате выполнения команды открывается диалоговое окно, ваш код может делать выбор в диалоговом окне (даже если само диалоговое окно не отображается). Например, следующая инструкция VBA эквивалентна выбору команды Главная –> Редактирование –> Найти и выделить –> Перейти и указанию диапазона ячеек А1:СЗ с последующим щелчком на кнопке ОК. Но само диалоговое окно Переход при этом не отображается (именно это и нужно).

Application.Goto Reference:=Range( " А1:СЗ " )

Иногда же приходится отображать встроенные окна Excel, чтобы пользователь мог сделать свой выбор. Для этого используется коллекция Dialogs объекта Application. Учтите, что в настоящее время компания Microsoft прекратила поддержу этого свойства. В предыдущих версиях Excel пользовательские меню и панели инструментов создавались с помощью объекта CommandBar. В версиях Excel 2007 и Excel 2010 этот объект по-прежнему доступен, хотя и работает не так, как раньше. Начиная с версии Excel 2007 возможности объекта CommandBar были существенно расширены. В частности, объект CommandBar можно использовать для вызова команд ленты с помощью VBA. Многие из команд, доступ к которым открывается с помощью ленты, отображают диалоговое окно. Например, следующая инструкция отображает диалоговое окно Вывод на экран скрытого листа (рис. 12; см. также файл ribbon control names.xlsm):


Рис. 12. Диалоговое окно, отображаемое в результате выполнения указанного выше оператора

Метод ExecuteMso принимает лишь один аргумент, idMso, который представляет элемент управления ленты. К сожалению, сведения о многих параметрах в справочной системе отсутствуют.

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

На самом деле пользоваться объектами CommandBar не стоит, поскольку вряд ли они будут поддерживаться в будущих версиях Excel.

Отображение формы ввода данных

Многие пользователи применяют Excel для управления списками, информация в которых ранжирована по строкам. В Excel поддерживается простой способ работы с подобными типами данных с помощью встроенных форм ввода данных, которые могут создаваться автоматически. Подобная форма предназначена для работы как с обычным диапазоном, так и с диапазоном, оформленным в виде таблицы (с помощью команды Вставка –> Таблицы –> Таблица). Пример формы ввода данных показан на рис. 13 (см. также файл data form example.xlsm).

Рис. 13. Некоторые пользователи предпочитают применять встроенные формы ввода данных Excel для ввода сведений; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке

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

  1. Щелкните правой кнопкой мыши на панели быстрого доступа и в контекстном меню выберите параметр Настройка панели быстрого доступа.
  2. На экране появится вкладка Панель быстрого доступа диалогового окна Параметры Excel.
  3. В раскрывающемся списке Выбрать команды из выберите параметр Команды не на ленте.
  4. В появившемся списке выберите параметр Форма.
  5. Щелкните на кнопке Добавить для добавления выбранной команды на панель быстрого доступа.
  6. Щелкните на кнопке ОК для закрытия диалогового окна Параметры Excel.

После выполнения перечисленных выше действий на панели быстрого доступа появится новый значок.

Для работы с формой ввода данных следует структурировать данные таким образом, чтобы Excel распознавал их в виде таблицы. Начните с указания заголовков столбцов в первой строке диапазона вводимых данных. Выделите любую ячейку в таблице и щелкните на кнопке Форма панели быстрого доступа. Excel отображает диалоговое окно, в котором будут вводиться данные. Для перемещения между текстовыми полями в целях ввода информации используйте клавишу <Tab>. Если ячейка содержит формулу, результат вычислений отображается в виде текста (а не в формате поля ввода данных). Другими словами, невозможно изменить формулы с помощью формы ввода данных.

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

Используйте метод ShowDataForm для отображения формы ввода данных Excel. Единственное требование заключается в том, что активная ячейка должна находиться в диапазоне. Следующий код активизирует ячейку А1 (в таблице), а затем отображает форму ввода данных.

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

  • сообщить пользователю о выполнении кода;
  • получить от пользователя подтверждение на выполнение того или иного действия;
  • запросить какие-то данные(число, текст для поиска, диапазон поиска и т.п.).

Простейшие запросы и подтверждения можно сделать при помощи уже встроенных диалоговых окон.

Из основных можно выделить три типа:
MsgBox - окно информирования пользователя с возможностью запроса действия (Да, Нет, Отмена и т.п.);
InputBox - окно запроса текстовой информации от пользователя (текст для поиска, дата, число и т.п.);
Application.InputBox - чуть более расширенная версия InputBox с возможностью указания не только текста и чисел, но и выделения диапазона ячеек (например для указания ячеек, в которых осуществлять поиск значения или которые необходимо закрасить).

MsgBox "Обработка завершена"

Все остальные параметры указывать не обязательно, но их использование несколько расширяет возможности данного диалогового окна.
Buttons - указывается тип выводимых кнопок и стиль окна. По умолчанию применяется vbOKOnly - одна только кнопка Ок:

Константы Buttons могут быть объединены между собой. Ниже приведен код, который показывает диалоговое окно с возможностью выбора одного из трех вариантов - Прервать, Повтор, Пропустить:

Следующий код показывает то же окно, но по умолчанию выделяет кнопку Пропустить

Вместо текстового представления констант можно применить их числовые значения:

Sub test() Dim lRetVal As Long 'для получения выбранного значения Retry_: lRetVal = MsgBox("Обработка завершена", 2 + 32 + 512) Select Case lRetVal Case 3 'vbAbort Exit Sub 'выходим из процедуры Case 4 'vbRetry GoTo Retry_ 'переход на метку Retry_ Case 5 'vbIgnore End Select End Sub

Нетрудно после этого предположить, что можно указать просто сумму данных чисел:

MsgBox "Обработка завершена", 546

Доступные константы значений возврата:

Константа Значение Нажатая кнопка
vboK 1 ОК
vbCancel 2 Отмена
vbAbort 3 Прервать
vbRetry 4 Повтор
vblgnore 5 Пропустить
vbYes 6 Да
vbNo 7 Нет

Title - указывается текст заголовка окна. Например, можно указать либо что это ошибка, либо имя своего приложения:

MsgBox "Обработка завершена", vbOKOnly, "Мое приложение"

HelpFile - указывается имя файла-справки в формате .HLP. Применяется, если параметр Buttons указан как vbMsgBoxHelpButton. Файл справки должен существовать.
Context - целое число. Указывается индекс страницы файла-справки, которую необходимо открыть. Указывается только если указан параметр HelpFile.

Небольшой практический пример применения простого диалогового окна MsgBox.
Цель процедуры(макроса): очистить все ячейки листа.
Согласитесь, что неплохо бы перед этим запросить у пользователя решение - он согласен с этим и это является обдуманным решением или случайностью?

Так же на странице Полезные программы для Excel и VBA можно найти программу MsgBox Generator, которая просто и наглядно формирует коды показа MsgBox.

MsgBox, автоматически закрываемый по истечении указанного времени
Диалог MsgBox удобен, если надо проинформировать пользователя о каких-то событиях или предоставить ему выбор Да или Нет. Но в тоже время есть один недостаток: этот диалог не закроется, пока пользователь не нажмет хоть какую-то кнопку. Но бывает необходимо просто проинформировать и закрыть окно независимо от реакции пользователя. Показали окно, подождали секунд 5-7 и даже если пользователь ничего не нажал - закрыли окно и продолжили выполнение кода. Стандартно такой опции в MsgBox нет. Однако можно использовать функции API(это встроенные в ОС Windows функции, которые можно вызывать из любого языка программирования).
Код такого диалога:

Основную роль здесь играет строка:

Declare Function MessageBoxTimeOut Lib "User32" Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As VbMsgBoxStyle, ByVal wLanguageId As Long, ByVal dwMilliseconds As Long) As Long

ДИАЛОГ ВВОДА ИНФОРМАЦИИ ПОЛЬЗОВАТЕЛЕМ - INPUTBOX
InputBox позволяет запросить от пользователя любую текстовую информацию.

InputBox Promt, [Title], [DefaultValue], [XPos], [YPos], [HelpFile], [Context]
Так же как и с MsgBox обязательным аргументом для указания является только Promt - это тот текст, который будет расположен непосредственно на самой форме диалога. Как правило это пояснение, что должен ввести пользователь.

Dim vRetVal 'для получения выбранного значения vRetVal = InputBox("Укажите значение для поиска:", "Запрос данных", "") If vRetVal = "" Then Exit Sub 'завершаем процедуру, если строка пуста

Title - текст, отображаемый в заголовке окна. В приведенном выше примере это "Запрос данных".
DefaultValue - значение, которое будет показано в поле ввода до указания значения пользователем. Как правило оно указывается в случаях, когда требуемое значение изменяется редко по запросу пользователя, но возможность такую оставить все же требуется. Пример: необходимо по нажатию кнопки удалять всегда столбец 5. Но иногда столбец в отчете смещается и требуется запрашивать у пользователя реальный номер столбца:

Sub DelCols() Dim vRetVal 'для получения выбранного значения vRetVal = InputBox("Укажите номер столбца для удаления(целое число):", "Запрос данных", 5) 'используем Val для преобразования текста vRetVal в число 'Val() преобразует число как текст в число. 'Если указан текст(например "третий") - он будет преобразован в 0 vRetVal = Val(vRetVal) If Val(vRetVal) = 0 Then MsgBox "Номер столбца должен быть целым числом больше нуля!", vbCritical, "DelCols" Exit Sub End If Columns(vRetVal).Delete End Sub

Важно знать: InputBox всегда возвращает только текст. Даже если указать - 5 - он вернет "5". В некоторых случаях это может привести к ошибке типов данных, поэтому я привел выше один из примеров преобразования типов данных к нужному.
Так же по прошествии какого-то времени появится вопрос, как отследить нажатие кнопки Отмена. Ведь ориентир на vRetVal = "" не всегда верен, иногда надо принять пустое значение(в случаях, скажем, замены значений) и отследить именно нажатие Отмена. Сделать это можно так:

vRetVal = InputBox("Укажите номер столбца для удаления(целое число):", "Запрос данных", "") If StrPtr(vRetVal) = 0 Then MsgBox "Нажата кнопка Отмена. Процедура прервана", vbCritical, "DelCols" Exit Sub End If

Больше всего вопросов здесь явно вызовет StrPtr . Эта специальная функция VBA, которая указывает, что переданы некие строковые данные. Если никаких данных не передавалось(а в случае с нажатием кнопки Отмена так и есть) указатель вернет 0. Если какие-то данные были переданы или нажата кнопка Ок(автоматом будет передана строка нулевой длины) - указатель StrPtr вернет значение отличное от нуля.

XPos - положение окна InputBox в твипах по горизонтали относительно левого края экрана. Следует учитывать, что именно относительно экрана, а не окна Excel.
YPos - положение окна InputBox в твипах по вертикали относительно верхнего края экрана.
HelpFile - указывается имя файла-справки в формате .HLP. В отличие от MsgBox указание файла допускается при любых значениях. При этом к уже имеющимся в InputBox кнопкам добавляется еще одна - Help, которая и отвечает за вызов справки.
Context - целое число. Указывается индекс страницы файла-справки, которую необходимо открыть при нажатии кнопки Help. Указывается только если указан параметр HelpFile.

В дополнение приведу классический пример применения InputBox - выполнение процедуры только после введения пароля:

Sub ClearAllCells() Dim vRetVal vRetVal = InputBox("Введите пароль:", "Авторизация", "") If StrPtr(vRetVal) = 0 Then 'Нажата кнопка Отмена Exit Sub End If 'если пароль неверный - завершаем процедуру без выполнения действий If vRetVal <> "1234" Then MsgBox "Введенный пароль неверный", vbCritical, "ClearAllCells" Exit Sub End If 'будет выполнено только если введен правильный пароль - 1234 'полная очистка всех ячеек активного листа ActiveSheet.Cells.Clear End Sub

Private Sub Workbook_Open() 'ThisWorkbook - Обращение к книге с кодом 'Но из модуля самой книги можно обращаться и проще - Me ThisWorkbook.Visible = False Dim user As String, lastrow As Long 'цикл, пока не будут указаны данные пользователя Do While user = "" user = InputBox("Введите имя пользователя:", "Авторизация", "") If StrPtr(user) = 0 Then MsgBox "Приложение будет закрыто", vbCritical, "Авторизация" ThisWorkbook.Close Exit Sub End If If user = "" Then MsgBox "Не указано имя пользователя!", vbCritical, "Авторизация" End If Loop With ThisWorkbook.Worksheets("LOG") 'получаем последнюю заполненную ячейку на листе "LOG" lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row 'записываем имя пользователя .Cells(lastrow + 1, 1) = user 'записываем время входа .Cells(lastrow + 1, 2) = Now End With End Sub

Что важно: этот код записывается в модуль ЭтаКнига(ThisWorkbook) и тогда при любом открытии книги будет появляться запрос на имя пользователя.

Так же некоторые примеры применения InputBox можно найти в статьях на сайте. Например:
Как удалить строки по условию?
Как массово изменить гиперссылки?

ДИАЛОГ ВВОДА ИНФОРМАЦИИ ПОЛЬЗОВАТЕЛЕМ - APPLICATION.INPUTBOX


В общем-то данный диалог мало отличается от обычного InputBox, за исключением типов возвращаемых данных. У данного диалога намного богаче функционал определения типов данных.

InputBox Promt, [Title], [DefaultValue], [Left], [Top], [HelpFile], [HelpContextID], [Type]
почти все параметры аналогичны таким же параметрам в InputBox.
Promt - текст, отображаемый на самой форме. Иначе говоря - сама суть показа диалога.
Title - текст, отображаемый в заголовке окна. В приведенном выше примере это "Запрос данных".
DefaultValue - значение, которое будет показано в поле ввода до указания значения пользователем.
Left - положение окна InputBox в поинтах по горизонтали относительно левого края экрана. В отличие от простого InputBox положение определяется на основании расположения самого окна Excel, а не экрана.
Top - положение окна InputBox в твипах по вертикали относительно верхнего края экрана.
HelpFile - указывается имя файла-справки в формате .HLP. В отличие от MsgBox указание файла допускается при любых значениях. При этом к уже имеющимся в InputBox кнопкам добавляется еще одна - Help, которая и отвечает за вызов справки. Сам вызов справки осуществляется путем нажатия на иконку со знаком вопроса в заголовке диалога.
HelpContextID - целое число. Указывается индекс страницы файла-справки, которую необходимо открыть при нажатии кнопки Help. Указывается только если указан параметр HelpFile.
Type - целое число. Указывается одно из предустановленных значений, указывающих диалогу Application.InputBox тип данных, которые предполагается получить от пользователя. Ниже приведен листинг кода, демонстрирующий запрос данных всех типов с описанием ограничений и нюансов.

Конечно, чаще всего используют Type:=8 , т.к. это избавляет от необходимости рисования своих форм и прочих заморочек для запроса указания диапазона от пользователя. Еще раз обращаю внимание, что для Type:=8 необходим ключевой оператор присвоения Set , т.к. в результате необходимо получить именно диапазон(т.е. объект). Ниже приведена процедура, которая запрашивает диапазон для очистки и корректно обрабатывает ситуацию при нажатии кнопки Отмена(т.е. не показывает никаких ошибок пользователю, а просто не выполняется). Стандартно при нажатии Отмена процедура завершается с ошибкой VBA вида Type Mismatch , что не очень грамотно с точки зрения взаимодействия с пользователем - он не должен видеть внутренние ошибки:

Конечно, можно еще много чего, наверное, рассказать - но я на данном этапе завершу. Если будут еще мысли - обязательно дополню статью.


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

FileDialog - это свойство в VBA, которое позволяет нам открывать файл или папку по пути. Используя это свойство, пользователю не нужно указывать путь к папке, вместо этого пользователь может выбрать путь. Кроме того, FileDialog имеет четыре свойства. Они также известны как константы для этого свойства. Они заключаются в следующем:

  1. msoFileDialogFilePicker : это позволяет пользователю выбрать файл.
  2. msoFileDialogFolderPicker : это позволяет пользователю выбрать папку.
  3. msoFileDialogOpen : это позволяет пользователю открыть файл.
  4. msoFileDialogSaveAs: позволяет пользователю сохранить файл.

Способ использования этого объекта в VBA заключается в следующем.

Application.FIledialog (тип Filedialog)

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

Как использовать Excel VBA FileDialog?

Ниже приведены различные примеры использования FileDialog в Excel с использованием кода VBA.

Вы можете скачать этот шаблон VBA FileDialog Excel здесь - Шаблон VBA FileDialog Excel

Excel VBA FileDialog - Пример № 1

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

Для использования Excel VBA FileDialog выполните следующие действия:

Шаг 1. Перейдите на вкладку « Разработчики » и нажмите на Visual Basic.


Шаг 2: Откройте модуль из меню «Вставка», как показано ниже.


Шаг 3: Запустите подпроцедуру, чтобы начать работать над примером.

Код:


Шаг 4: Объявите переменную как Filedialog, как показано ниже.

Код:


Шаг 5: Теперь давайте используем этот объект из метода Application.Filedialog следующим образом.


Шаг 6: Как только мы откроем скобки, мы увидим опцию для четырех типов FileDialog, как показано на рисунке ниже.


Шаг 7: выберите опцию типа Filedialog как msoFileDialogFilePicker

Код:


Шаг 8: Теперь нам нужно сделать диалоговое окно для этого примера, давайте использовать With Statement следующим образом.

Код:


Шаг 9: Если есть какие-либо фильтры, нам нужно очистить фильтры, поставить оператор точки и написать оператор, как показано ниже.

Код:


Шаг 10: Теперь мы хотим, чтобы пользователь выбрал несколько файлов одновременно или один файл? Для этого примера давайте придерживаться одного файла за раз, поэтому используйте .Allowmultiselect как false.

Код:


Шаг 11: Теперь, чтобы показать диалоговое окно, мы можем написать .show, чтобы показать диалоговое окно следующим образом.

Код:


Шаг 12: Как только мы выполним приведенный выше код, мы увидим диалоговое окно следующим образом.


Шаг 13: Поскольку нам нужно отобразить выбранный путь пользователя, объявите другую переменную в виде строки в коде.

Код:


Шаг 14: Мы будем использовать оператор selecteditems, чтобы найти путь к файлу выбранного пользователя и сохранить его в нашей переменной следующим образом.

Код:


Шаг 15: После оператора With используйте функцию msgbox, чтобы отобразить адрес выбранного файла.

Код:


Шаг 16. Запустите приведенный выше код, выберите файл и нажмите ОК, чтобы увидеть путь следующим образом.


Excel VBA FileDialog - Пример № 2

Теперь давайте посмотрим на другую опцию объекта VBA FileDialog, которая называется msoFileDialogSaveAs. Это свойство используется для сохранения файла по любому пути. Выполните следующие шаги, чтобы использовать Excel VBA FileDialog.

Шаг 1: В том же модуле напишем еще одну подпроцедуру для сохранения файла следующим образом.

Код:


Шаг 2: Теперь объявите две переменные, одну как строку, а другую как целое число.

Код:


Шаг 3: Теперь давайте сделаем диалоговое окно видимым для пользователя, используя свойство show следующим образом.

Код:


Шаг 4: Теперь используйте оператор IF, чтобы определить выбор пользователя следующим образом.

Код:


Шаг 5: Теперь давайте получим путь, выбранный пользователем в нашей переменной пути, следующим образом.

Код:


Шаг 6: Теперь давайте отобразим результат с помощью функции msgbox и завершим цикл IF.

Код:


Шаг 7: Теперь выполните приведенный выше код и увидите результат, откроется диалоговое окно для сохранения файла.


Шаг 8: дайте имя файла и нажмите «Сохранить», чтобы получить путь к файлу следующим образом.


То, что нужно запомнить

  • FileDialog является свойством объекта VBA.
  • Нам не нужно указывать путь к коду, используя этот объект.
  • Используя оператор точки, мы можем видеть и использовать свойства объекта IntelliSense.

Рекомендуемые статьи

Это руководство по VBA FileDialog. Здесь мы обсудим, как использовать объект FileDialog в Excel, используя код VBA, а также некоторые практические примеры и загружаемый шаблон Excel. Вы также можете просмотреть наши другие предлагаемые статьи -

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