Создание пользовательских форм VBA

Пользовательские формы VBA

Пользовательская форма - очень важная часть программирования на VBA. Он позволяет создать профессиональный пользовательский интерфейс для общения с пользователями вашего приложения VBA. Это также позволяет вам полностью контролировать действия пользователя с вашей книгой.

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

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

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

Важным моментом является то, что при отображении пользовательской формы, которая является встроенной или модальной, вы не можете редактировать свой код в VBE или получить доступ к каким-либо функциям Excel. Только когда форма будет закрыта, курсор появится в вашем коде.

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

Excel VBA в виде нескольких встроенных форм, которые можно использовать для общения с пользователем.

Окно сообщения

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

Это простой пример. Нажмите только одну кнопку, а в строке заголовка написано «Microsoft Excel».

Код для его создания очень прост:

123 Sub TestMsgBox ()MsgBox «Этот процесс завершен»Конец подписки

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

123456789 Sub TestMsgBox ()Dim Ret As VariantRet = MsgBox («Вы уверены?», VbYesNo или vbQuestion, «Мое приложение»)Если Ret = vb Да, то'Ваш процесс здесьЕщеВыйти из подводной лодкиКонец, еслиКонец подписки

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

Кроме того, когда вы возвращаете значение из окна сообщения, возвращаемая переменная должна быть определена как вариант или vbMsgBoxResult, а в операторе окна сообщения должны использоваться скобки,

Поле ввода

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

12345 Sub TestInputBox ()Dim Ret As StringRet = InputBox («Пожалуйста, введите ваше имя», «Введите имя»)MsgBox RetКонец подписки

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

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

Это позволяет использовать диалоговое окно файла Windows в коде VBA. Когда он запущен, он выглядит очень впечатляюще для пользователя, но его очень просто включить, и вы автоматически получаете все функциональные возможности диалогового окна с файлом.

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

Используйте команду «ChDir», чтобы изменить каталог по умолчанию в соответствии с вашими требованиями перед отображением диалогового окна файла.

Обратите внимание на использование подстановочных знаков в параметре FileFilter. Отображаемые файлы Excel могут быть до 2007 года, содержать макросы или быть двоичными, поэтому используется фильтр «.xls *».

123456 Подложка TestFileDialog ()Dim MyFile As StringChDir "C: \ temp"MyFile = Application.GetOpenFilename («Файлы Excel (* .xls *), *. Xls *», «Выберите файл»)MsgBox MyFileКонец подписки

При необходимости вы можете разрешить пользователю выбирать сразу несколько файлов с помощью параметра MultiSelect. Значение по умолчанию - False (только для одиночного выбора).

12345678 Подложка TestFileDialog ()Dim MyFile как вариантChDir "C: \ temp"MyFile = Application.GetOpenFilename ("Файлы Excel (* .xls *), *. Xls *",, "Выбрать файл",, True)Для каждого f в MyFileMsgBox fДалее fКонец подписки

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

Цикл For Each отображает полный путь и имя каждого выбранного файла.

Диалоги Excel по умолчанию

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

Хорошим примером этого является отображение диалогового окна «Печать» из VBA:

123 Sub TestPrintDialog ()Application.Dialogs (xlDialogPrint). ПоказатьКонец подписки

Когда вы откроете скобки в коллекции Dialogs, вы увидите список огромного количества констант для встроенных диалогов. Стоит поэкспериментировать с некоторыми из этих опций в вашем коде.

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

Вы можете создавать свои собственные пользовательские формы, вставляя пользовательскую форму в редактор Visual Basic (VBE).

Вы делаете это, выбирая Insert | UserForm в строке меню VBE.

Нажмите «UserForm», и появится новая пустая форма, которую вы можете использовать для разработки.

Сама форма (обозначенная как «UserForm1») выглядит довольно маленькой, но вы можете использовать ручки вокруг нее, чтобы увеличить или уменьшить ее, перетащив маркеры с помощью курсора.

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

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

Свойства, которые вы видите в настоящее время, применяются только к самой форме.

Свойство «Имя» - это имя, используемое для определения объекта формы в коде VBA. Возможно, вы захотите использовать что-то более значимое для имени объекта, чтобы при просмотре кода было очевидно, какая форма используется.

Свойство «Имя» также будет отображаться в окне «Обозреватель проекта» в верхнем левом углу экрана.

Вы захотите изменить строку заголовка вашей формы на что-то отличное от «UserForm1», и вы можете сделать это, введя новый текст в свойстве «Caption».

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

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

Использование панели инструментов

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

Набор инструментов обеспечивает реальную механику дизайна формы. Это позволяет добавлять в форму обычные элементы управления Windows, с которыми пользователи знакомы.

Вы заметите, что на форме есть сеть точек. Это «snapgrid», поэтому когда вы добавляете элемент управления в форму, он автоматически выравнивает позицию по строкам и столбцам точек. Это очень помогает при выравнивании элементов управления, чтобы элементы управления не выглядели неровными.

Если вы нажмете на элемент управления, а затем решите не использовать его, нажатие на значок «Стрелка» в верхнем левом углу панели инструментов вернет ваш курсор в нормальное состояние.

Вы можете добавить дополнительные элементы управления на панель инструментов с помощью Tools | Дополнительные элементы управления в меню VBE. Их доступно значительное количество, но в зависимости от ваших версий Windows и Excel они не всегда работают, поэтому часто требуются некоторые эксперименты.

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

Добавление кнопки выхода в форму

Командную кнопку легко добавить в форму. Это выглядит так же, как кнопки, которые вы видите в других формах Windows, обычно как кнопка «ОК» или «Отмена».

Щелкните значок командной кнопки на панели инструментов. Это второй значок слева в нижнем ряду значков. См. Изображение выше. На нем есть буквы «ab».

Вы можете либо удерживать кнопку мыши нажатой и перетащить элемент управления в форму, либо переместить курсор в форму, где он изменится на «крестик», и вы сможете позиционировать и изменять размер кнопки.

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

Ваша форма теперь будет выглядеть так:

Кнопка будет иметь текст по умолчанию в качестве заголовка, но вы захотите изменить его в соответствии с вашими требованиями. Вы можете щелкнуть текст внутри кнопки («CommandButton1»), и это позволит вам напрямую редактировать заголовок.

Вы также можете изменить его в окне свойств (нижний левый угол экрана). Вы увидите свойство под названием «Caption», и вы можете изменить его значение. Измените это на «Выход».

Как и в случае со свойствами формы, свойство Name определяет имя, которое будет использоваться в вашем коде VBA. Вы можете захотеть использовать в своем коде более понятное и понятное имя. Вы можете ввести это в свойстве «Имя».

Вы можете изменить положение кнопки, перетащив ее по форме, и вы можете изменить ее размер, щелкнув ручки кнопок (белые квадратные поля) и перетащив ручки, чтобы увеличить или уменьшить

Вы также можете изменить размер кнопки, изменив значения высоты и ширины в окне свойств.

Вы можете просмотреть свою форму в Excel, щелкнув зеленый треугольник на панели инструментов VBE или нажав F5

Вы можете вызвать форму из кода VBA в модуле с помощью метода «Показать».

123 Подложка ShowForm ()UserForm1.ShowКонец подписки

Ваша пользовательская форма фактически является глобальным объектом и может быть вызвана из любого места в вашем коде.

В настоящее время ваша командная кнопка ничего не делает, потому что за ней нет кода VBA. Вы должны написать это сами! Все, что может произойти в данный момент, - это нажать на значок «Закрыть» X в правом верхнем углу формы.

Чтобы добавить код VBA, дважды щелкните кнопку в форме

Вы попадете в обычное окно кода VBA и покажете событие щелчка по умолчанию.

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

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

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

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

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

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

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

Чтобы добавить метку, щелкните значок «A» на панели инструментов (верхний ряд, второй слева) и либо дважды щелкните по нему, либо переместите курсор на форму и выберите положение и размер.

Используя свойство «Caption» в окне свойств или щелкнув элемент управления меткой, вы можете ввести текст для элемента управления меткой.

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

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

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

Добавление текстового элемента управления в форму

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

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

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

Текст «Введите свое имя» представляет собой элемент управления ярлыком, как описано ранее, и теперь у нас есть белое текстовое поле, готовое для того, чтобы пользователь мог что-то ввести.

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

Одним из очень важных свойств текстового поля является свойство «MultiLine». Если вы хотите, чтобы пользователь вводил большой объем текста в текстовый элемент управления, например комментарии, то для свойства MultiLine должно быть установлено значение True.

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

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

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

Вы можете добавить этот код в событие «Изменить» для текстового поля.

123 Частное под-текстовое поле1_Change ()Таблицы ("Sheet1"). Диапазон ("A1"). Value = TextBox1.ValueКонец подписки

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

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

Вы используете событие «Выход». Это срабатывает, когда пользователь перемещает фокус на другой элемент управления в форме, что означает, что пользователь больше не вводит данные.

123456 Private Sub TextBox1_Exit (ByVal Cancel As MSForms.ReturnBoolean)Если IsNull (TextBox1.Value) или Len (TextBox1.Value) <4, тоMsgBox «Недопустимое имя», vbCriticalTextBox1.SetFocusКонец, еслиКонец подписки

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

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

Инициализировать и активировать события в форме

Когда VBA впервые создает и строит форму, он запускает событие «Initialize». Однако, поскольку форма также отображается в этот момент, она также запускает событие «Активировать». С этого момента каждый раз, когда форма появляется с использованием метода «Показать» или появляется как часть иерархии форм, запускается событие «Активировать», но не событие «Инициализировать».

Событие «Инициализация» происходит только один раз, но событие «Активировать» может происходить много раз.

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

12345678 Частная подписка UserForm_Initialize ()TextBox1.Value = Sheets ("Sheet1"). Range ("A1"). ValueЕсли TextBox1.Value = ”” ТогдаTextBox1.Visible = ЛожьЕщеTextBox1.Visible = TrueКонец, еслиКонец подписки

Вы можете найти событие «Initialize» во втором раскрывающемся списке окна кода и имя пользовательской формы в первом раскрывающемся списке.

Этот код будет использовать значение ячейки A1 на «Sheet1» в качестве значения по умолчанию в текстовом поле, созданном ранее в этой статье. Когда форма появляется впервые, появится значение по умолчанию. Затем пользователь может перезаписать значение по умолчанию, и оно будет сохранено. Если ячейка CellA1 пуста, текстовое поле будет скрыто, в противном случае оно будет видно.

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

1 TextBox1.Value = «Джон Смит»

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

123 Private Sub TextBox1_Exit (ByVal Cancel как MSForms.ReturnBoolean)Таблицы ("Sheet1"). Диапазон ("A10"). Value = TextBox1.ValueКонец подписки
123 Частная подписка UserForm_Activate ()TextBox1.Value = Sheets ("Sheet1"). Range ("A10"). ValueКонец подписки

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

Сохранение заявки и форм

Когда вы сохраняете книгу Excel, содержащую ваши формы, все формы и их код VBA также сохраняются. Однако любые значения, которые хранятся в формах во время их отображения, будут потеряны.

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

Модальные и немодальные формы

Сама форма имеет свойство «Показать модальное окно». По умолчанию установлено значение True, но его можно изменить на False (немодальный).

Если форма является модальной, это означает, что ни одна из функций Excel не может быть доступна во время отображения формы. Это включает ваш код в окне VBE. Вы можете просмотреть код, но курсор и клавиатура отключены.

В немодальной форме вы можете получить доступ ко всем функциям Excel, включая окно VBE, пока форма отображается.

Это важно с точки зрения управления поведением пользователей.

Закрытие формы

Как бы хорошо вы ни писали свой код, заставляющий пользователя следовать определенному маршруту, они могут легко его обойти, щелкнув «Закрыть» X в правом верхнем углу формы.

Вы можете предотвратить это, изменив событие «QueryClose» формы

1234 Private Sub UserForm_QueryClose (Отменить как целое число, CloseMode как целое число)Отмена = ИстинаMsgBox "Это действие отключено"Конец подписки

Событие «QueryClose» запускается, когда пользователь щелкает X «Закрыть» формы. Этот код отменяет действие, поэтому пользователь вынужден использовать вашу кнопку «Выход» и код, который стоит за ней.

Включение и отключение элементов управления

Все элементы управления в вашей форме имеют свойство «Включено», для которого установлено значение «Истина» или «Ложь». Если установлено значение False, элемент управления неактивен. Его можно увидеть, но нельзя использовать.

Также существует свойство Visible, которое снова имеет значение True или False.

Вы можете написать код, чтобы сделать определенный элемент управления непригодным для использования или сделать его полностью невидимым для пользователя. Используя оператор «Если», вы можете выбрать обстоятельства, когда вам нужно это сделать.

Например, вы можете изначально отключить кнопку «Выход», пока пользователь не введет значение в TextBox1 (имя).

123 Частная подписка UserForm_Initialize ()CommandButton1.Enabled = FalseКонец подписки
1234567 Частное под-текстовое поле1_Change ()Если Len (TextBox1.Value)> 0, тоCommandButton1.Enabled = TrueЕщеCommandButton1.Enabled = FalseКонец, еслиКонец подписки

Этот код использует событие формы 'Initialize' для отключения кнопки выхода (Command Button 1), когда форма впервые появляется, а затем использует событие 'Change' в TextBox1 (name), чтобы включить кнопку Exit, если что-то было введено или отключено это, если поле пустое.

Событие «Изменить» запускается каждый раз, когда вводится новый символ или удаляется из текстового поля. Если пользователь пытается ввести текст, чтобы активировать кнопку, а затем удаляет весь текст, кнопка будет немедленно отключена.

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave