Как вызвать форму в excel vba

Обновлено: 21.11.2024

Метод VBA Userform.Show делает именно то, что и следовало ожидать: он отображает форму пользователя на экране. Как и Application.InputBox, пользовательские формы отлично подходят для сбора пользовательского ввода. Пользовательские формы гораздо более гибкие, чем InputBox, поэтому вы можете взаимодействовать с пользователями любыми способами. Однако без отображения формы пользователь вообще не может взаимодействовать!

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

Как отобразить пользовательскую форму VBA

Начнем с пользовательской формы с именем Userform1 (это имя используется по умолчанию при создании пользовательской формы). Я добавил три основных элемента: командную кнопку, метку и текстовое поле, чтобы наша пользовательская форма не была просто пустым полем.

Наша внешне непривлекательная форма выглядит так:

Чтобы показать его пользователю, поместите этот код в обычный модуль:

Создавайте мощные макросы с помощью нашего бесплатного комплекта разработчика VBA

Такой макрос легко скопировать и вставить, но создать его самостоятельно сложнее. Чтобы помочь вам создавать такие макросы, мы создали бесплатный комплект разработчика VBA и написали Большую книгу макросов Excel VBA, полную сотен готовых макросов, которые помогут вам освоить файловый ввод-вывод, массивы, строки и многое другое. скопируйте ниже.

При запуске этого модуля появится следующее окно:

Обратите внимание, что на самом деле форма ничего не делает, кроме выхода с X вверху. Когда вызывается метод .Show, VBA направляет поток программы на событие UserForm_Initialize. Здесь вы можете сделать множество настроек. Вы можете редактировать элементы управления пользовательской формы, такие как заголовок командной кнопки. Вы даже можете вызывать другие пользовательские формы или запускать целые макросы на этапе инициализации, но ваша пользовательская форма не появится, пока не завершится событие инициализации.

Событие UserForm_Initialize на самом деле является моим секретом для появления и исчезновения пользовательских форм и удаления границ пользовательских форм.

Простое изменение заголовка с помощью события UserForm_Initialize будет выглядеть примерно так:

Теперь при вызове метода .Show ваша пользовательская форма будет переписывать текст по умолчанию для командной кнопки. Первоначально заголовок командной кнопки гласил: «Выберите файл», но теперь он гласит: «Нажмите на меня».

Вот три экрана, на которых мы вводим код VBA для управления нашей пользовательской формой:

Обратите внимание, что метод .Show находится в модуле, а событие инициализации происходит в собственном коде пользовательской формы. В третьем окне мы просто разработали макет нашей пользовательской формы.

Модальный вариант

При вводе .Show вы увидите аргумент Intellisense для [Modal] . Этот аргумент является необязательным и принимает в качестве входных данных vbModal или vbModeless.

По умолчанию для метода .Show установлено значение true (vbModal), что означает, что пользователь не может ничего делать с приложением, пока пользовательская форма не будет закрыта. Это означает, что пользователь не может изменять электронную таблицу или взаимодействовать с ранее открытыми пользовательскими формами, пока ваша пользовательская форма открыта. Однако вы можете вкладывать пользовательские формы и вызывать макросы из пользовательской формы, не дожидаясь закрытия первой формы.

Вызов пользовательской формы из пользовательской формы

Иногда может потребоваться вызвать пользовательскую форму из другой пользовательской формы. Для этого поместите строку кода Userform1.Show в любое нужное вам событие Userform. Давайте рассмотрим пример.

Давайте создадим новую пользовательскую форму с именем UserForm2 . Наша UserForm2 имеет одну кнопку для отображения UserForm1. Это выглядит так:

Код для вызова Userform1 довольно прост:

Для этого мы использовали объект CommandButton1 и событие Click, но вы можете использовать другие доступные объекты (красная стрелка) или другое событие (синяя стрелка). Если вы добавите больше элементов управления, у вас будет больше объектов. Существует множество различных типов событий. Несколько примеров: двойные щелчки или движения мыши.

Запуск макросов из пользовательских форм

Если вы хотите запускать макросы из своей пользовательской формы, вам просто нужно вызвать макрос из нужного события. Возможно, вы хотите получить имя файла для обработки позже? Свяжите свою командную кнопку в Userform1 с макросом GetOpenFilename, который мы обсуждали ранее.

Используйте этот код для запуска основного средства выбора файлов:

Теперь, когда вы наводите указатель мыши на кнопку, запускается макрос basic_get_user_file. Обычно вы хотите дождаться, пока пользователь действительно нажмет кнопку ( CommandButton1_Click ), но мы хотели продемонстрировать вам новое событие!

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

Не забудьте выгрузить

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

Рекомендуется добавить в пользовательские формы кнопку "Закрыть" или "Отмена". Добавьте новую кнопку Command в образец пользовательской формы и переименуйте ее, например, cbCancel, отредактировав свойство (Name) (F4). Вставьте следующий макрос в раздел кода (F7) пользовательской формы.

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

Вы можете использовать функцию "Выгрузить меня", чтобы выгрузить свою пользовательскую форму из самого кода пользовательской формы. Однако, если вы хотите вызывать и выгружать пользовательские формы откуда-то еще, например из главного модуля, вы не сможете использовать Unload Me. Вам нужно будет заменить меня именем вашей пользовательской формы, например:

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

Если вы еще этого не сделали, подпишитесь на мою бесплатную учебную программу wellsrPRO VBA, используя форму ниже, а затем поделитесь этой статьей в Twitter и Facebook.

Готовы делать больше с VBA?
Мы собрали гигантский PDF-файл с более чем 300 готовыми макросами и хотим, чтобы вы получили его бесплатно. Введите свой адрес электронной почты ниже, и мы вышлем вам копию вместе с нашим комплектом разработчика VBA, полным советов, приемов и ярлыков VBA.

Прежде чем мы начнем, я хочу сообщить вам, что мы разработали набор шпаргалок по VBA, чтобы вам было проще писать лучшие макросы. Мы включили более 200 советов и 140 примеров макросов, поэтому в них есть все, что вам нужно знать, чтобы стать лучшим программистом VBA.

Эта статья была написана Кори Сарвером, автором блога The VBA Tutorials Blog. Посетите его в LinkedIn и на его личной странице.

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

Запуск формы с помощью кнопки в электронной таблице

Вернитесь к таблице и добавьте новую кнопку. Когда появится диалоговое окно «Назначить макрос», выберите Button1_Click:

Когда вы нажмете OK, вы увидите окно кодирования.

Чтобы запустить форму, вам нужен метод Show после имени вашей формы:

Добавьте строку в свой собственный Button1_Click Sub.

Теперь вернитесь к своей электронной таблице. Нажмите кнопку, и вы должны увидеть, как появится ваша форма:

Запуск формы из панели задач Excel в Excel 2007

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

Начиная с Excel 2010, вы можете настраивать саму ленту, добавляя новые вкладки и новые группы. Мы сделаем это на следующем уроке. Если у вас только Excel 2007, вот как запустить форму с панели быстрого доступа.

Во-первых, нам нужно создать новый Sub в редакторе Excel VBA. Затем мы можем добавить наш код UserForm1.Show в этот Sub. Такой способ означает, что нам не нужно иметь в электронной таблице кнопку, которая запускает форму.

В обозревателе проектов слева дважды щелкните Module1:

Если дважды щелкнуть Module1, откроется новое окно кодирования. Добавьте в окно следующий код:

Итак, подпрограмма называется CallUserForm. Мы хотим показать форму с именем UserForm1.

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

Поэтому нажмите круглую кнопку Office в левом верхнем углу Excel 2007. Нажмите Параметры Excel внизу:

Когда вы нажмете «Параметры Excel», вы увидите диалоговое окно «Параметры». Нажмите «Настроить» в списке слева:

Теперь щелкните раскрывающийся список вверху и выберите Макросы из списка:

Когда вы выбираете макросы, вы должны увидеть подпрограмму CallUserForm в списке под ней.

Выбрав CallUserForm, нажмите кнопку "Добавить" посередине:

В списке справа показаны все команды, добавленные на панель быстрого доступа. Первый — «Сохранить», затем «Отменить», затем «Повторить» и, наконец, наш макрос CallUserForm.

Чтобы изменить значок, нажмите кнопку «Изменить». Затем вы увидите диалоговое окно. Выберите значок и измените отображаемое имя:

Нажмите «ОК» в диалоговом окне кнопки «Изменить».Нажмите «ОК» в диалоговом окне «Параметры», чтобы вернуться в Excel.

Взгляните на панель быстрого доступа в верхней части Excel 2007, и вы увидите выбранный значок:

В этой главе рассказывается, как создать пользовательскую форму Excel VBA. Пользовательская форма, которую мы собираемся создать, выглядит следующим образом:

Добавить элементы управления

Чтобы добавить элементы управления в форму пользователя, выполните следующие действия.

<р>1. Откройте редактор Visual Basic. Если Project Explorer не отображается, нажмите View, Project Explorer.

<р>2. Нажмите «Вставить», «Пользовательская форма». Если панель инструментов не появляется автоматически, щелкните Вид, Панель инструментов. Ваш экран должен быть настроен, как показано ниже.

<р>3. Добавьте элементы управления, перечисленные в таблице ниже. Как только это будет завершено, результат должен соответствовать изображению пользовательской формы, показанному ранее. Например, создайте элемент управления текстовым полем, щелкнув TextBox на панели инструментов. Затем вы можете перетащить текстовое поле в пользовательскую форму. Когда вы доберетесь до рамки автомобиля, не забудьте сначала нарисовать эту рамку, прежде чем размещать в ней две кнопки выбора.

<р>4. Измените имена и подписи элементов управления в соответствии с таблицей ниже. Имена используются в коде Excel VBA. Подписи — это те, которые появляются на вашем экране. Хорошей практикой является изменение имен элементов управления. Это облегчит чтение вашего кода. Чтобы изменить имена и подписи элементов управления, нажмите «Вид», «Окно свойств» и щелкните каждый элемент управления.

Элемент управления Имя Заголовок
Пользовательская форма DinnerPlannerUserForm Планировщик ужина
Текстовое поле NameTextBox
Текст Поле PhoneTextBox
Список CityListBox
Поле со списком< /td> DinnerComboBox
Флажок DateCheckBox1 13 июня
Флажок DateCheckBox2 20 июня
Флажок DateCheckBox3 27 июня
Рама CarFrame Автомобиль
Кнопка выбора Кнопка выбора автомобиля1 Да
Кнопка выбора Кнопка выбора автомобиля2 Нет
Текстовое поле MoneyTextBox
Кнопка вращения MoneySpinButton< /td>
Командная кнопка OKButton OK
Командная кнопка ОчиститьКнопку Очистить
Командная кнопка CancelButton Отмена
7 ярлыков Изменять не нужно Имя:, Номер телефона: и т.д.

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

Показать форму пользователя

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

Частная подпрограмма CommandButton1_Click()

Теперь мы собираемся создать Sub UserForm_Initialize. Когда вы используете метод Show для пользовательской формы, этот подпрограмма будет выполняться автоматически.

<р>2. В Project Explorer щелкните правой кнопкой мыши DinnerPlannerUserForm и выберите "Просмотреть код".

<р>3. Выберите Пользовательскую форму из левого раскрывающегося списка. Выберите «Инициализировать» в правом раскрывающемся списке.

<р>4. Добавьте следующие строки кода:

Частная подпрограмма UserForm_Initialize()

'Пустое поле NameTextBox
NameTextBox.Value = ""

'Пустое поле PhoneTextBox
PhoneTextBox.Value = ""

'Пустое поле CityListBox
CityListBox.Clear

'Заполнить CityListBox
CityListBox
.AddItem "Сан-Франциско"
.AddItem "Окленд"
.AddItem "Ричмонд"
End With

'Пустой DinnerComboBox
DinnerComboBox.Clear

'Заполните DinnerComboBox
DinnerComboBox
.AddItem "Итальянский"
.AddItem "Китайский"
.AddItem "Картошка и мясо"
End With
>
'Снять флажки DataCheckBox
DateCheckBox1.Value = False
DateCheckBox2.Value = False
DateCheckBox3.Value = False

'Не использовать машину по умолчанию
CarOptionButton2.Value = True

'Empty MoneyTextBox
MoneyTextBox.Value = ""

'Установить фокус на NameTextBox
NameTextBox.SetFocus

Объяснение: текстовые поля пусты, списки и поля со списком заполнены, флажки сняты и т. д.

Назначить макросы

Теперь мы создали первую часть пользовательской формы. Хотя это уже выглядит аккуратно, пока ничего не произойдет, когда мы нажмем командные кнопки на пользовательской форме.

<р>2. В Project Explorer дважды щелкните DinnerPlannerUserForm.

<р>3.Дважды щелкните кнопку вращения денег.

<р>4. Добавьте следующую строку кода:

Частная подписка MoneySpinButton_Change()

Объяснение: эта строка кода обновляет текстовое поле, когда вы используете кнопку прокрутки.

<р>5. Дважды щелкните кнопку ОК.

<р>6. Добавьте следующие строки кода:

Частная подписка OKButton_Click()

Затемнение пустой строки по длине

'Сделать Sheet1 активным
Sheet1.Activate

'Определить emptyRow
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1

'Информация о передаче
Cells(emptyRow, 1).Value = NameTextBox.Value
Cells(emptyRow, 2).Value = PhoneTextBox.Value
Cells(emptyRow, 3).Value = CityListBox.Value
Cells(emptyRow, 4).Value = DinnerComboBox.Value

If DateCheckBox1.Value = True Then Cells(emptyRow, 5).Value = DateCheckBox1.Caption

If DateCheckBox2.Value = True Then Cells(emptyRow, 5).Value = Cells(emptyRow, 5).Value & " " & DateCheckBox2.Caption

If DateCheckBox3.Value = True Then Cells(emptyRow, 5).Value = Cells(emptyRow, 5).Value & " " & DateCheckBox3.Caption

If CarOptionButton1.Value = True Then
Cells(emptyRow, 6).Value = "Yes"
Еще
Cells(emptyRow, 6).Value = "No"
Конец, если

Cells(emptyRow, 7).Value = MoneyTextBox.Value

Объяснение: сначала мы активируем Sheet1. Далее мы определяем emptyRow. Переменная emptyRow является первой пустой строкой и увеличивается каждый раз при добавлении записи. Наконец, мы передаем информацию из пользовательской формы в определенные столбцы emptyRow.

<р>7. Дважды щелкните кнопку «Очистить».

<р>8. Добавьте следующую строку кода:

Частная подписка ClearButton_Click()

Объяснение: эта строка кода вызывает Sub UserForm_Initialize, когда вы нажимаете кнопку "Очистить".

<р>9. Дважды щелкните кнопку «Отмена».

<р>10. Добавьте следующую строку кода:

Частная подписка CancelButton_Click()

Объяснение: эта строка кода закрывает форму пользователя, когда вы нажимаете кнопку "Отмена".

Протестируйте форму пользователя

Выйдите из редактора Visual Basic, введите метки, показанные ниже, в строку 1 и протестируйте пользовательскую форму.

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

Шаг 1. Перейдите в окно VBA, нажав Alt + F11, перейдите в меню «Вставка» и выберите «Пользовательская форма». После выбора форма пользователя отображается, как показано на следующем снимке экрана.

Шаг 2. Создайте формы, используя заданные элементы управления.

Шаг 3. После добавления каждого элемента управления необходимо присвоить ему имя. Заголовок соответствует тому, что отображается в форме, а имя соответствует логическому имени, которое будет отображаться при написании кода VBA для этого элемента.

Шаг 4. Ниже приведены имена для каждого из добавленных элементов управления.

< /tr> td>

Шаг 5. Добавьте код для события загрузки формы, щелкнув форму правой кнопкой мыши и выбрав «Просмотреть код».

Шаг 6. Выберите «Пользовательская форма» в раскрывающемся списке объектов и выберите метод «Инициализировать», как показано на следующем снимке экрана.

Шаг 7. После загрузки формы убедитесь, что текстовые поля очищены, раскрывающиеся поля заполнены, а переключатели сброшены.

Шаг 8. Теперь добавьте код к кнопке «Отправить». Нажав кнопку отправки, пользователь сможет добавить значения на лист.

Шаг 9. Добавьте метод для закрытия формы, когда пользователь нажимает кнопку «Отмена».

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

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

Управление Логическое имя Заголовок
От frmempform Форма сотрудника
Ярлык с идентификатором сотрудника empid ID сотрудника
Ярлык для имени Имя Имя
Ярлык для фамилии фамилия Фамилия
dob Label Box dob Дата рождения
Ярлык mailid mailid Идентификатор электронной почты
Ярлык паспорта Владелец паспорта Владелец паспорта
Текстовое поле Emp ID txtempid НЕ ПРИМЕНИМО
Текстовое поле имени txtfirstname НЕ ПРИМЕНИМО
Текст фамилии Поле txtlastname НЕ ПРИМЕНИМО
Текстовое поле идентификатора электронной почты txtemailid НЕ ПРИМЕНИМО
Поле со списком даты cmbdate НЕ ПРИМЕНИМО
Поле со списком "Месяц" cmbmonth НЕ ПРИМЕНИМО
Поле со списком "Год" cmbyear НЕ ПРИМЕНИМО
Да Переключатель радио да Да
Нет переключателя radiono Нет
Кнопка отправки btnsubmit Отправить
Кнопка отмены btncancel Отмена