Vba userform excel примеры: Работа с пользовательскими формами в VBA

Содержание

Объект UserForm | Microsoft Docs

  • Чтение занимает 2 мин

В этой статье

Объект UserForm object — это окно или диалоговое окно, которое является частью пользовательского интерфейса приложения.A UserForm object is a window or dialog box that makes up part of an application’s user interface.

Коллекция UserForm collection — это коллекция, элементы которой представляют каждую загруженную форму UserForm в приложении.The UserForms collection is a collection whose elements represent each loaded UserForm in an application. Коллекция UserForm содержит свойство Count , метод Item и метод Add .The

UserForms collection has a Count property, an Item method, and an Add method. Свойство Count определяет число элементов в коллекции; свойство Item (элемент по умолчанию) — конкретный элемент коллекции; а метод Add позволяет добавить элемент UserForm в коллекцию.Count specifies the number of elements in the collection; Item (the default member) specifies a specific collection member; and Add places a new UserForm element in the collection.

СинтаксисSyntax

UserForm Пользовательские пользовательские формы [ . Элемент ] (index)UserForm UserForms [ .Item ] (index)

Индекс заполнителя представляет целое число в диапазоне от 0 до

UserForm. Count — 1.The placeholder index represents an integer with a range from 0 to UserForms.Count — 1. Item — это элемент коллекции UserForms по умолчанию, который не требуется задавать.Item is the default member of the UserForms collection and need not be specified.

ПримечанияRemarks

Коллекцию UserForms можно использовать для перебора всех загруженных в приложение форм.You can use the UserForms collection to iterate through all loaded user forms in an application. В ней определяется внутренняя глобальная переменнаяUserForms.It identifies an intrinsic global variable named UserForms. Вы можете передать пользовательские формы(index) функции, Аргумент которого указан как класс

UserForm .You can pass UserForms(index) to a function whose argument is specified as a UserForm class.

Свойства пользовательских форм определяют их внешний вид, в том числе позицию, размер и цвет, а также некоторые аспекты их поведения.User forms have properties that determine appearance such as position, size, and color; and aspects of their behavior.

Пользовательские формы также отвечают на события, запускаемые пользователем или системой.User forms can also respond to events initiated by a user or triggered by the system. Например, вы можете добавить в процедуру события Initialize для элемента UserForm код, позволяющий инициализировать переменные уровня модуля до отображения элемента UserForm.For example, you can write code in the

Initialize event procedure of the UserForm to initialize module-level variables before the UserForm is displayed.

В дополнение к свойствам и событиям методы можно использовать для управления пользовательскими формами с помощью кода.In addition to properties and events, you can use methods to manipulate user forms by using code. Например, с помощью метода Move можно изменить расположение и размер пользовательской формы.For example, you can use the Move method to change the location and size of a UserForm.

При проектировании форм пользователей задайте свойство BorderStyle для определения границ и задайте свойство Caption , чтобы оно поместило текст в строку заголовка.When designing user forms, set the BorderStyle

property to define borders, and set the Caption property to put text in the title bar. В коде можно использовать методы Hide и Show , чтобы сделать UserForm невидимым или видимым во время выполнения.In code, you can use the Hide and Show methods to make a UserForm invisible or visible at run time.

Элемент UserForm имеет тип данных Object.UserForm is an Object data type. Вы можете объявить переменные с типом UserForm, прежде чем присвоить их экземпляру типа UserForm, объявленному во время разработки.You can declare variables as type UserForm before setting them to an instance of a type of UserForm declared at design time. Аналогичным образом, можно передать аргумент в процедуру как значение типа

UserForm.Similarly, you can pass an argument to a procedure as type UserForm. Вы можете создавать в коде несколько экземпляров пользовательских форм с помощью ключевого слова New в операторах Dim, Set и Static.You can create multiple instances of user forms in code by using the New keyword in Dim, Set, and Static statements.

Вы можете получить доступ к коллекции элементов управления пользовательской формы с помощью коллекции Controls .You can access the collection of controls on a UserForm by using the Controls collection. Например, чтобы скрыть все элементы управления пользовательской формы, используйте код, аналогичный приведенному ниже.For example, to hide all the controls on a

UserForm, use code similar to the following.

For Each Control in UserForm1.Controls
    Control.Visible = False
Next Control

См. такжеSee also

Поддержка и обратная связьSupport and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Макросы Excel — пользовательские формы

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

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

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

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

  • Нажмите вкладку РАЗРАБОТЧИК на ленте.
  • Нажмите Visual Basic. Откроется окно Visual Basic для книги.
  • Нажмите Вставить,
  • Выберите UserForm из выпадающего списка.

Пользовательская форма появляется в правой части окна.

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

Разверните окно UserForm.xlsx — UserForm1.

Вы находитесь в режиме дизайна сейчас. Вы можете вставить элементы управления в пользовательскую форму и написать код для соответствующих действий. Элементы управления доступны в панели инструментов. Свойства UserForm находятся в окне свойств. UserForm1 (подпись UserForm) указывается в разделе «Формы» в проводнике проектов.

  • Измените заголовок UserForm на Project Report — Daily в окне свойств.
  • Измените имя пользовательской формы на ProjectReport.

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

Элементы управления в панели инструментов

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

Excel предоставляет два типа элементов управления — элементы управления формы и элементы управления ActiveX. Вы должны понимать разницу между этими двумя типами элементов управления.

Элементы управления формой

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

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

Элементы управления ActiveX

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

У вас есть следующие элементы управления ActiveX в UserForm ToolBox —

  • Указатель
  • этикетка
  • Текстовое окно
  • Поле со списком
  • ListBox
  • CheckBox
  • OptionButton
  • Рамка
  • Кнопка-переключатель
  • CommandButton
  • TabStrip
  • MultiPage
  • Полоса прокрутки
  • в полях ввода
  • Образ

В дополнение к этим элементам управления Visual Basic предоставляет функцию MsgBox, которую можно использовать для отображения сообщений и / или запроса пользователя о действии.

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

этикетка

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

пример

Текстовое окно

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

пример

Список

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

  • Вставьте ListBox в пользовательскую форму.
  • Нажмите на список.
  • Введите ProjectCodes для Name в окне свойств ListBox.

Есть три типа списков —

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

  • Список выбора множественного выбора — Список списка множественного выбора включает либо один выбор, либо смежные (смежные) варианты.

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

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

Список выбора множественного выбора — Список списка множественного выбора включает либо один выбор, либо смежные (смежные) варианты.

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

Вы можете выбрать один из этих типов списков в окне свойств.

  • Щелкните правой кнопкой мыши на пользовательской форме.
  • Выберите View Code из выпадающего списка. Откроется окно кода UserForm.
  • Нажмите Инициализировать в правом верхнем углу окна кода.
  • Введите следующее в Private Sub UserForm_Initialize ().
ProjectCodes.List = Array ("Proj2016-1", "Proj2016-2", "Proj2016-3", "Proj20164", "Proj2016-5") 
  • Перейдите на вкладку «Выполнить» на ленте.
  • Выберите Run Sub / UserForm из выпадающего списка.

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

Поле со списком

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

  • Вставьте ComboBox в пользовательскую форму.
  • Нажмите ComboBox.
  • Введите ProjectCodes2 для имени в окне свойств ComboBox.

  • Щелкните правой кнопкой мыши на пользовательской форме.
  • Выберите View Code из выпадающего списка.
  • Откроется окно кода UserForm.

Введите следующее, как показано ниже.

ProjectCodes2.List = Array ("Proj2016-1", "Proj2016-2", "Proj2016-3", "Proj20164", "Proj2016-5") 
  • Перейдите на вкладку «Выполнить» на ленте.
  • Выберите Run Sub / UserForm из выпадающего списка.

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

Нажмите на нужный элемент, скажем, Project2016-5. Выбранная опция будет отображаться в поле со списком.

CheckBox

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

Флажок может иметь два состояния:

  • Выбрано (включено), помечено галочкой в ​​поле
  • Очищено (выключено), обозначено прозрачной рамкой

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

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

  • Установите флажки в пользовательской форме, как показано ниже.

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

Установите флажки в пользовательской форме, как показано ниже.

  • Перейдите на вкладку «Выполнить» на ленте.
  • Выберите Run Sub / UserForm из выпадающего списка.
  • Нажмите на поля для выбранных вами вариантов.

OptionButton

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

Кнопка выбора представлена ​​маленьким кружком. Кнопка выбора может иметь одно из следующих двух состояний:

  • Выбран (включен), обозначен точкой в ​​круге
  • Сброс (выключен), обозначается пробелом

Рамка

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

Элемент управления фреймом представлен прямоугольным объектом с необязательной меткой.

  • Вставьте рамку с надписью «Выбор».

  • Вставьте две кнопки с надписями «Да» и «Нет» в элементе управления кадром. Опции Да и Нет являются взаимоисключающими.

Вставьте рамку с надписью «Выбор».

Вставьте две кнопки с надписями «Да» и «Нет» в элементе управления кадром. Опции Да и Нет являются взаимоисключающими.

  • Перейдите на вкладку «Выполнить» на ленте.
  • Выберите Run Sub / UserForm из выпадающего списка.
  • Нажмите на выбранный вами вариант.

Кнопка-переключатель

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

Вставьте кнопку переключения на пользовательскую форму, как показано ниже —

  • Перейдите на вкладку «Выполнить» на ленте.

  • Выберите Run Sub / UserForm из выпадающего списка. По умолчанию кнопка переключения будет в активированном состоянии.

Перейдите на вкладку «Выполнить» на ленте.

Выберите Run Sub / UserForm из выпадающего списка. По умолчанию кнопка переключения будет в активированном состоянии.

Нажмите кнопку переключения. Кнопка переключения будет отключена.

Если вы снова нажмете кнопку переключения, она будет включена.

CommandButton

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

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

  • Щелкните правой кнопкой мыши на кнопке.
  • Введите следующий код в sub Commandbutton1_click ().
ProjectCodes2.DropDown 
  • Перейдите на вкладку «Выполнить» на ленте.
  • Выберите Run Sub / UserForm из выпадающего списка.

Нажмите кнопку команды. Откроется выпадающий список со списком, так как это действие, которое вы написали в коде.

TabStrip

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

Полоса прокрутки

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

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

  • Щелкните правой кнопкой мыши по полосе прокрутки.
  • Выберите View Code из выпадающего списка. Откроется окно кода.
  • Добавьте следующую строку под sub ScrollBar1_Scroll ().
TextBox2.Text = "Scrolling Values" 
  • Перейдите на вкладку «Выполнить» на ленте.
  • Выберите Run Sub / UserForm из выпадающего списка.

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

MsgBox ()

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

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

Отображается значок окна сообщения

Вы можете использовать значки сообщений в окне, которые изображают конкретное сообщение. У вас есть несколько значков сообщений в соответствии с вашими целями —

  • Введите следующий код в ScrollBar1_scroll.
MsgBox "Select Ok or Cancel", vbOKCancel, "OK  - Cancel Message" 
MsgBox "It's an Error!", vbCritical, "Run time result" 
MsgBox "Why this value", vbQuestion, "Run time result" 
MsgBox "Value Been for a Long Time", vbInformation, "Run time result" 
MsgBox "Oh Is it so", vbExclamation, "Run time result" 
  • Перейдите на вкладку «Выполнить» на ленте.
  • Выберите Run Sub / UserForm из выпадающего списка.
  • Перетащите поле прокрутки.

Вы получите следующие сообщения последовательно.

Разработка UserForm

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

Обратитесь к учебнику VBA в этой библиотеке учебников для примера UserForm.

Класс UserForm — создание формы vba

Довольно часто при создании макросов может понадобиться придать им некой “динамичности”. Как и рядовые приложения, редактор VBA предоставляет объект UserForm, который отвечает за создание формы.

По своей природе, объект vba UserForm представляет из себя пустое диалоговое окно, на поверхность которого можно добавить различные элементы управления (кнопки, списки и так далее). В отличии от тех объектов, с которыми мы работали в сценариях сервера Windows Script Host, объекты VBA помимо свойств и методом, обладают еще и событиями, кроме этого, объекты класса UserForm vba содержат в себе модуль класса, который может хранить собственные методы и свойства, или код для обработки событий.

Что бы добавить новую форму к vba проекту, воспользуйтесь меню Insert, пункт UserForm. Обратите внимание: в окне Проектов есть папка Forms, в которой хранятся все формы, добавленные в проект, имя для формы назначается автоматически, например, UserForm1, UserForm2,…,UserFormN. Если вы случайно закроете окно формы, то его можно вновь запустить, выбрав нужную форму в окне Проектов. Можете также прочитать предыдущую стать «Знакомство с редактором VBA»

Некоторые свойства класса UserForm vba языка

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

BackColor – содержит цвет фона.

BorderColor – цвет рамки

BorderStyle – стиль рамки, принимает только два возможных значения.

Caption – свойство определяет заголовок формы, фактически, это то т же заголовок окна программы. По умолчанию, данное свойство содержит то же значение, что и свойство Name.

Enabled – принимает логическое True или False, и определяет, доступна ли форма. Если значение свойства ровно False, то ни один из элементов управления не доступен.

ShowModal – как и предыдущее свойство, ShowModal может принимать логические значения. True – по умолчанию, “модальный” режим, пока не будет закрыта текущая форма, другая форма или возврат в документ будут недоступны.

Font – определяет шрифт.

ForeColor – определяет цвет переднего плана формы, например, цвет текста.

Некоторые методы класса UserForm vba языка

Hide – данный метод убирает из видимости форму, делая ее скрытой. Все ее параметры и элементы управления остаются неизменными.

Repaint – позволяет перерисовать отображаемую форму.

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

И так, что бы не томить душу, давайте создадим простую форму, назовем ее “Первая программа” (свойство Caption), у меня имя формы UserForm1. Хорошо, теперь нам нужно написать макрос, при запуске которого будет выводиться форма. Для этого добавляем в проект новый модуль и в окне кода пишем следующее:

Sub Module1()
    UserForm1.Show
End Sub

Тут Module1 – имя процедуры, оно совпадает с именем модуля, оно хранится в свойстве Name. Sub … End Sub – это блок процедуры. UserForm1.Show – тут мы вызываем метод Show объекта UserForm1 для отображения формы, помните, UserForm1 – имя моей формы, его тоже можно изменить.

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

Некоторые события класса UserForm vba языка

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

Activate – событие возникает каждый раз, когда окно формы становится активным.

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

DblClick – аналог предыдущему событию, только тут происходит двойной клик по форме.

Deactivate – событие возникает каждый раз, как окно формы переходит в неактивное состояние.

Initialize – возникает как только происходит загрузка формы в память с помощью метода Show или оператора Load.

Resize – происходит изменение размеров формы

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

Помним, что для вызова метода или события, сперва идет имя объекта, а потом, после точки, имя метода или свойства. С событиями все по-другому: нам нужно создать процедуру и присвоить ей имя в стиле “Объект_Событие”, то есть, сначала мы пишем имя объекта (например, UserForm1), потом идет символ подчеркивания и имя события.

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

Private Sub UserForm_Click()
End Sub

Видим, что данная процедура рассчитана для события Click, давайте в ней пропишем:

MsgBox "Вы кликнули по форме!!!"

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

Обратите внимание, что у вас в проекте есть форма и два редактора кода, один содержит строки:

Sub Module1()
    UserForm1.Show
End Sub

Это фактически и есть наш макрос, он отображается в окне проекта. Что бы получить доступ к редактору кода для самой формы, выберите в редакторе vba, в окне Проекта нужную форму и нажмите на крайнюю левую кнопку вверху (View Code), или просто выберите аналогичный пункт в меню View. Также, обратите внимание, что теперь вы можете выбрать нужное событие в окне кода для данной формы, список находится вверху справа.

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

Работа с формами в VBA (Excel)

Доброго времени суток! Сегодня мы поговорим о работе с формами VBA, а также рассмотрим практически понятия фильтров и флагов в VBA.

Формы в VBA

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

Немного основных свойств объекта Форма(UserForm):

Name – данное свойство содержит имя формы, или, точнее сказать, имя объекта. Нужно понимать, что данное значение доступно только в теле программы и никак не влияет на конечный результат.
BackColor – содержит цвет фона.
BorderColor – цвет рамки.
Caption – свойство определяет заголовок формы, фактически, это тот же заголовок окна программы. По умолчанию, данное свойство содержит то же значение, что и свойство Name.
Enabled – принимает логическое True или False, и определяет, доступна ли форма.
ShowModal – может принимать только логические значения. True – пока не будет закрыта текущая форма, другая форма или возврат в документ будут недоступны.
Font – определяет шрифт.
ForeColor – определяет цвет переднего плана формы, например, цвет текста.

Флаги и фильтры

Флаги — также называемые checkbox в программировании. Могут принимать только логические значения. Обычно флаги ставят напротив вопросов (как ответ Да/Нет) или функций (выполнять/не выполнять).
Фильтры — в двух словах,процесс проверки на какое либо условие.

Теперь рассмотрим пример, отражающий в себе работу с формами, с флагами и фильтрами в VBA.

Дана таблица 4х5, в каждой ячейке которой записаны числа, "+", "-", слова, начинающиеся с больших и маленьких букв и символы, не относящиеся к алфавиту. Необходимо создать пользовательскую форму с набором разных вариантов фильтров.

Выглядит таблица примерно так:

Создаём формы

Добавим форму в редакторе VBA: Insert > UserForm.
С помощью MultiPage в Toolbox делаем 2 страницы.
На первой странице будет располагаться фильтр по первым буквам слов. С помощью TextBox и SpinButton.
На второй странице сделаем с помощью CheckBox и Label разные варианты фильтров. А также добавляем основную кнопку расчётов.
Названия объектов изменятся с помощью Caption.
Всё это должно выглядеть примерно так.

Теперь создадим форму вывода после фильтрации.
Создадим Listbox, Label и Button.

Код

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

Под кнопку расчёта идёт такой код:

Private Sub CommandButton1_Click()
Dim i As Integer, j As Integer, x As Integer
Const v = 7
x = 0
Dim flag(v) As Boolean
For i = 0 To Me.Controls.count - 1
     j = InStr(1, Me.Controls.Item(i).Name, "CheckBox")
    If j <> 0 Then
        flag(x) = Me.Controls.Item(i).Value
        x = x + 1
    End If
Next i

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

Const N = 5
Const M = 4
'_________________________________Очищаем форму 2 и создаём 4 столбца
UserForm2.ListBox1.Clear
UserForm2.ListBox1.ColumnCount = 4
'_________________________________
Dim massiv(N, M) As Variant
Dim bool(N, M) As Boolean
For i = 0 To N - 1
    For j = 0 To M - 1
        If flag(5) Then massiv(i, j) = Cells(i + 1, j + 1)
        If flag(0) Then
            If flag(1) And Not flag(2) Then
                If pr_chislo(Cells(i + 1, j + 1)) Then massiv(i, j) = Cells(i + 1, j + 1)
                If pr_text(Cells(i + 1, j + 1), flag(6), flag(3), flag(4)) Then massiv(i, j) = Cells(i + 1, j + 1)
            End If
            If Not flag(1) And flag(2) Then
                If pr_plus(Cells(i + 1, j + 1)) Then massiv(i, j) = Cells(i + 1, j + 1)
                If pr_text(Cells(i + 1, j + 1), flag(6), flag(3), flag(4)) Then massiv(i, j) = Cells(i + 1, j + 1)
            End If
            If flag(1) And flag(2) Then
........

Так как код очень громоздкий, то настоятельно рекомендую вам скачать исходники ниже.
Вначале очищаем форму. Затем прописываем в цикле условия в зависимости от «поднятых» флагов. Команды pr_chislo, pr_plus, pr_text вызывают соответствующие булевые функции, которые будут в исходнике ниже.

For i = 0 To N - 1
    For j = 0 To M - 1
        If massiv(i, j) = "" Then massiv(i, j) = "<Empty>"
        Cells(7 + i, j + 1) = CStr(massiv(i, j))
    Next j
Next i

На основе возвращаемых от функций значений построим таблицу. Та ячейка, которая не прошла фильтрацию, записывается как <Empty>

For i = 0 To N - 1
    UserForm2.ListBox1.AddItem massiv(i, 0)
Next i
For i = 0 To N - 1
    For j = 1 To M - 1
        UserForm2.ListBox1.List(i, j) = massiv(i, j)
    Next j
Next i
UserForm2.Show
End Sub

Записываем наш массив во вторую форму.
На этом мы закончим.

К сожалению, отобразить весь код не предоставилось возможным, однако, не расстраивайтесь! Мы ответим на все ваши вопросы в комментариях.
Скачать исходник

Поделиться ссылкой:

Похожее

Программы и макросы Excel в категории Форма ввода

  • Программа предназначена для создания и печати этикеток, наклеек, ценников и квитанций на основании данных в таблице Excel. При помощи этой программы вы можете: распечатать ценники на товар, взяв данные из прайс-листа сформировать этикетки и наклейки для заданных строк вашей таблицы подготовить квитанции для оплаты услуг ЖКХ (счета за водоснабжение, канализацию, электроэнергию)…

  • Наверняка, вы сталкивались с ситуацией, когда необходимо производить поиск некоторого значения по всей книге Excel (искать частичное совпадение на всех листах активной книги)   Штатными средствами Excel вывести поле для поиска на панель инструментов не удаётся, а вызывать каждый раз диалоговое окно нажатием комбинации клавиш Ctrl + F не всегда удобно. На помощь придёт эта…

  • Надстройка для облегчения ввода значений в ячейку Excel Автор: nerv Last Update: 27/03/2012 Вам часто приходится заниматься заполнением электронных таблиц, долго и муторно выбирать варианты из выпадающих списков? А, может, иметь дело с одними теми же, но не структурированными данными? Раз так, то данная надстройка призвана облегчить Вам жизнь: сократить время, потраченное на нудную,…

  • Программа предназначена для автоматизации процесса создания форм ввода и редактирования данных из таблиц Excel. Сейчас реализована лишь малая часть программы. Но уже сейчас программа достаточно точно распознаёт типы полей таблицы, и для полей типа «выпадающий список» и «поле с маской ввода» формирует список значений и маску ввода соответственно. Как будет свободное время -…

  • Надстройка позволяет экспортировать все изображения с листа Excel в графические файлы. Доступен выбор типа создаваемых файлов (поддерживаются форматы JPG, GIF и PNG) Кроме того, можно указать имя папки, в которую будут помещены созданные файлы (эта папка будет создана автоматически в том же каталоге, где расположен обрабатываемая книга Excel) Если нужно сохранять картинки под именами из…

  • База данных «Преподаватели» предназначена для автоматизации работы администрации учебных заведений. Программа обеспечивает выполнение всех необходимых операций по приему документов, поиску и анализу информации, составлению отчетов. Эта база данных представляюет собой урезанную и немного изменённую версию программы АИСС СПК. Программа обеспечивает: Хранение полной…

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

  • Программа АИСС «СПК» предназначена для автоматизации работы приемной комиссии колледжей и техникумов. АИСС обеспечивает выполнение всех необходимых операций по приему документов, поиску и анализу информации, составлению отчетов. Назначением программы является автоматизация труда работника приёмной комиссии учебного заведения. Программа обеспечивает: Хранение полной…

  • Программа позволяет сформировать отчёты по базе данных больницы. Кроме того, реализован ввод данных в базу о новых пациентах.  

  • Программа предназначена для формирования прайс-листов на ноутбуки с соответствии с требованиями интернет-каталога Onliner.by Основные функции программы: (учитываются цены фирм-конкурентов, цены onliner.by и надбавка фирмы) загрузка каталога ноутбуков (названия, характеристики, цены) с сайта onliner.by в файл Excel, и обновление этого каталога назначение соответствий моделей…

  • Программный комплекс, предназначенный для автоматизации учёта и администрирования сети связи телефонной или телекоммуникационной компании. Программа позволяет хранить и редактировать базу данных объектов (в виде файлов Excel), просматривать существующие трассы и формировать новые.   Особенность программы — возможность учёта и администрирования узлов связи с нестандартными…

  • Система учёта заявок предназначена для автоматизации ввода, редактирования и учёта заданий на заказ запасных частей для автомобилей. Программа позволяет производить поиск по базе данных, и распечатку информации о выбранном заказе. Эта база данных представляет собой урезанную и немного изменённую версию программы АИСС СПК.

  • Программа позволяет упростить ввод данных в бланк заявления на пополнение счёта.   Реализована проверка корректности ввода некоторых полей. (например, для полей «серия паспорта» и «номер паспорта» реализована проверка вводимых символов — допускается ввод только заданного количества цифр) Выбор большинства значений производится из выпадающих списков, что позволяет…

  • Надстройка, позволяющая загрузить из выбранной папки список файлов на лист Excel. Автор: VictorM Особенности надстройки: задаваемая пользователем глубина поиска в подпапках простановка гиперссылок на листе Excel на найденные файлы вывод дополнительных характеристик файла (размер файла, дата создания файла, полный путь) изменяемая маска поиска (поиск по части имени файла, по…

  • Макрос предназначен для показа видеороликов на форме в Microsoft Excel. На форме UserForm расположен компонент WebBrowser, в котором открывается заданных видеоролик при запуске формы. Вызов формы осуществляется таким кодом: Sub ПримерПоказаВидеоНаФорме() Video$ = Range(«b2») Caption$ = Range(«b5») URL_1$ = Range(«b3») Website$ = Range(«b4…

  • Программа предназначена для быстрого поиска перевода выделенного в документе Word слова (или фразы) с использованием специализированного медицинского словаря. Для поиска переводов используется словарь, расположенный на сайте заказчика. Программа подключается к словарю через веб-интерфейс сайта, авторизуется (логин и пароль хранятся в отдельном текстовом файле), после чего производит поиск…

  • Программа предназначена для вывода отчёта по мероприятиям налоговой инспекции.   Исходные данные для обработки расположены на других листах того же файла Excel:  перечень мероприятий налогового контроля, проведенных в отношении контрагентов поручения об истребовании документов (информации) запросы в кредитные организации о предоставлении сведений по операциям на счетах…

  • В данной статье собрано несколько примеров установки прозрачности форм (UserForm) Во всех файлах для установки прозрачности используется WinAPI функция SetLayeredWindowAttributes Примеры взять с форума ПланетаExcel, и немного переработаны. Прозрачность форм можно задавать в широком диапазоне — от 0 (полностью прозрачная форма) до 255 (непрозрачная) Также добавлен пример установки…

  • Данная программа предназначена для ввода данных о заказе и сортировки заказов по группам. Программа представляет собой шаблон Excel для создания, сортировки и сведения в общую таблицу, заказов различных категорий. (категории можно менять вручную на отдельном листе). Сотрудник регистрирует своё имя, выбирая его из выпадающего списка, а после выбора ФИО, в соседние поля подтягивается…

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

  • Как известно, бланки документов, разработанные налоговой службой (ФНС), составлены весьма оригинально… Если на печати они выглядят сравнительно неплохо, то ввод данных в них — работа не для слабонервных. Представьте себе, что необходимо ввести фразу из десятков слов в отдельные ячейки — по одной букве в одну ячейку, — это ж сколько сил и времени надо, чтобы не ошибиться с вводом… А если вам…

  • Программа позволяет формировать отчёты по трафику на основании данных биллинговой системы. В качестве исходных данных программа принимает: логин абонента дату начала и окончания периода сбора статистики   Особенности программы: формирование отчётов по всему трафику, или только по оплачиваемому создание листа итогов с диаграммой (сразу видно, с какого сайта был…

  • Честно говоря, не помню уже, кому и зачем понадобилась такая странная программка. (скорее всего, это был заказ от студента, — ибо практического применения данной программы я не вижу) А предназначена эта программа для ввода слов (в данном случае, пароля) путем рисования линий по случайным точкам на экране. После запуска программы, предлагается ввести имя и пароль. Имя вводится как обычный текст…

  • Программа предназначена для вывода заданного текста на форму VB (VBA) Особенности программы: вывод символов осуществляется в виде картинок, размещаемых на форме возможность выбора шрифта для вывода (к программе прилагается 5 папок с наборами изображений символов для разных шрифтов) можно задать высоту и ширину изображений автоподбор размеров букв на форме в процессе набора текста…

  • Программа позволяет искать в выбранной папке изображения, основываясь на содержимом ячеек таблицы Excel, и производить вставку найденных изображений в соседние ячейки. Реализовано: сжатие вставляемых изображений поиск картинок в подпапках установка выбранного пользователем размера для вставляемых изображений отображение состояния обработки файла (прогресс-бар)   При вставке…

  • Макрос предназначен для сохранения в реестре (и изменения через форму) настроек почтового аккаунта. Эти настройки используются макросом рассылки почты Send_Mail (для отправки почты из Excel без применения специализированных почтовых программ) При запуске формы, она считывает из реестра Windows ранее сохранённые настройки. Данный подход позволяет избежать хранения конфиденциальных данных в…

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

  • Примеры пользовательских форм в Excel, построенных с помощью VBA

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

    Может у кого есть свои соображения в этой теме, поделитесь, подскажите куда рыть или просто посочувствуйте:)

    Несколько правил:

    Правило 1.
    На листе книги лучше помещать только одну таблицу.

    Правило 2.
    Если на листе есть какие-то другие данные, то нужно между этими данными и таблицей оставлять хотя бы одну пустую строку и один пустой столбик.

    Правило 3.
    В самой таблице пустых столбиков и строк быть не должно.

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

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

    Правило 6.
    Перед данными в таблице не нужно делать лишние пробелы.

    Приступаем:

    Шаг 1.
    Наберите заголовки столбиков. Заполните первую строчку данными.

    Выделение ячейки

    Шаг 2.
    Кнопки «Форма» вы в меню не найдете. Ее надо вывести на панель быстрого доступа. Эта панель находится рядом с кнопкой «Office».

    Этап 1.
    Щелкните левой кнопкой мыши на кнопке «Office».

    Этап 2.
    Появится панель. В самом низу есть кнопка «Параметры Excel». Щелкните на этой кнопке левой кнопкой мыши.

    Кнопка «Office»

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

    Панель «Параметры Excel»

    Этап 4.
    Правая часть панели «Параметры Excel» изменится. Там будет заголовок «Настройка панели быстрого доступа». Вот именно сюда нам и надо.

    Панель «Параметры Excel»

    Этап 5.
    Теперь установите настройки. В списке «Выбрать команды из» выберите пункт «Все команды» и щелкните на нм левой кнопкой мыши.

    Панель «Параметры Excel»

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

    Панель «Параметры Excel»

    Команда «Форма» добавится в список «Настройка панели быстрого доступа», который расположен справа. Проверьте еще, чтобы под названием списка было выбрано «Для всех документов».

    Панель «Параметры Excel»

    Этап 6.
    В правом нижнем углу панели «Параметры Excel» есть кнопка ОК. Щелкните на ней левой кнопкой мыши. Панель закроется.

    Панель «Параметры Excel»

    Теперь проверьте панель быстрого доступа. На ней должна появиться кнопка «Форма».

    Кнопка «Форма»

    Шаг 3.
    Щелкните левой кнопкой мыши на первой ячейке новой строки вашей таблицы.

    Выделение ячейки

    Шаг 4.
    Щелкните на кнопке «Форма». На экране появится форма, которая была создана по вашей таблице. У меня она получилась такая:

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

    Запишите в нужные окошки новые данные. Для перехода из поля в поле удобно пользоваться кнопкой Tab.

    Снова щелкните на кнопке «Добавить». Новая запись встанет в таблицу.

    Вместо кнопки «Добавить» можно пользоваться клавишей Enter.

    Теперь давайте разберемся с кнопками на форме.

    Кнопка «Добавить» добавит в таблицу новую запись. При этом форма остается открытой. В нее можно записывать новые данные.

    Кнопка «Закрыть» добавит в таблицу новую запись. Форма закроется.

    Кнопка «Удалить» удалит запись из формы и из таблицы.

    Кнопка «Назад» будет показывать в форме предыдущую запись, то есть переходить на одну запись назад.

    Если у вас таблица получилась очень большая, то для выбора нужной записи можно воспользоваться кнопкой «Критерии». Щелкните на этой кнопке левой кнопкой мыши. Форма немножко изменится. У нее появится подзаголовок «Критерии».

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

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

    Стандартная последовательность шагов при этом следующая:

    1. Вставьте новую форму UserForm в проект VBAProject рабочей книги.
    2. Добавьте элементы управления в форму UserForm.
    3. Настройте свойства добавленных элементов управления.
    4. Создайте процедуры «обработчики событий» для элементов управления. Эти процедуры добавляются в модуль кода UserForm и выполняются при возникновении различных событий (например, при щелчке на кнопке).
    5. Разработайте процедуру, которая отображает форму UserForm. Эта процедура находится в модуле VBA (а не в модуле кода для формы UserForm).
    6. Определите простой способ вызова на выполнение процедуры, созданной в п. 5. Можно поместить кнопку на рабочий лист, команду ленты и т.д.

    Рассмотрим эти шаги подробнее.

    Вставка новой формы UserForm

    Чтобы добавить в проект форму UserForm, запустите VBE (например, нажав в Excel клавиши ), выберите рабочую книгу в окне Project и выполните команду Inserts –> UserForm ). Формы UserForm получают такие имена, как UserForm1, UserForm2 и т.д. Можно переименовать форму, изменив свойство Name в окне Properties (см. рис. 1). Если это окно не отображается, нажмите в VBE клавишу . В рабочей книге может быть произвольное количество форм UserForm, а каждая форма включает единственное пользовательское диалоговое окно.

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

    Чтобы добавить элементы управления в форму UserForm, воспользуйтесь панелью Toolbox . Обратите внимание, что в VBE отсутствуют команды меню, предназначенные для добавления элементов управления. Если панель Toolbox не отображена на экране, пройдите по меню View –> Toolbox (рис. 2).

    Рис. 2. Окно Toolbox для добавления элементов управления в пользовательскую форму

    Щелкните на той кнопке в панели Toolbox , которая соответствует добавляемому элементу управления. После этого щелкните внутри диалогового окна для создания элемента управления (используется размер элемента по умолчанию). Также можно щелкнуть на элементе управления и, перетащив его границы в диалоговом окне, задать необходимый размер в пользовательском диалоговом окне. Добавленному элементу управления назначается имя, которое состоит из названия типа элемента управления и числового кода. Рекомендуется их переименовать, чтобы в коде VBA было понятно, с чем вы имеете дело. Согласитесь, что Р rоductListBox звучит лучше, чем ListBox1 .

    Элементы управления в окне Toolbox

    Форма UserForm , которая показана на рис. 3, размещена в файле all userform controls.xlsm .


    Рис. 3. Эта форма UserForm содержит 15 элементов управления

    Элемент управления CheckBox (6) предоставляет пользователю возможность выбрать один из двух вариантов: включить или выключить. Если галочка установлена, то CheckBox имеет значение True, в противном случае – False.

    ComboBox (4) подобен объекту ListBox (5). Отличие заключается в том, что ComboBox представляет раскрывающийся список, в котором в определенный момент времени отображается только одно значение. Кроме того, пользователю в поле списка разрешено вводить значение, которое необязательно представляет одну из опций объекта ComboBox .

    Каждое создаваемое диалоговое окно будет иметь как минимум один элемент управления CommandButton (10). Обычно используются кнопки ОК и Отмена .

    Элемент управления Frame (9) применяется в качестве оболочки для других элементов управления. Он добавляется в диалоговое окно либо в целях эстетики, либо из соображений логического группирования однотипных элементов управления. Элемент управления Frame требуется в случае, если в диалоговом окне содержится более одного набора элементов управления OptionButton.

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

    Элемент управления Label (2) отображает текст в диалоговом окне.

    Элемент управления ListBox (5) предоставляет список опций, из которого пользователь может выбрать один вариант (или несколько). Вы вправе указать диапазон на листе, который содержит элементы списка. Этот диапазон может состоять из нескольких столбцов. Кроме того, элемент управления

    VBA Excel. Метод Controls.Add пользовательской формы

    Программное добавление элементов управления на пользовательскую форму в VBA Excel. Метод Controls.Add – синтаксис, компоненты, примеры.

    Метод Controls.Add пользовательской формы

    Синтаксис метода Controls.Add

    Set Var = Form.Controls.Add(ProgID, [Name], [Visible])

    Описание компонентов метода

    • Var – объектная переменная, которой будет присвоен созданный элемент управления. Она может быть объявлена как Control, Object или Variant.
    • Form – имя пользовательской формы, на которую добавляется элемент управления.
    • ProgID – программный идентификатор создаваемого элемента управления.
    • Name – необязательный параметр, задающий имя добавляемого элемента управления.
    • Visible – необязательный параметр, определяющий видимость создаваемого элемента управления. Может принимать значение True или False.

    ProgID и Name, используемые в выражениях метода Controls.Add заключаются в прямые кавычки. Смотрите в примерах.

    Идентификаторы элементов управления формы

    Элемент управления Программный идентификатор
    CheckBox Forms.CheckBox.1
    ComboBox Forms.ComboBox.1
    CommandButton Forms.CommandButton.1
    Frame Forms.Frame.1
    Image Forms.Image.1
    Label Forms.Label.1
    ListBox Forms.ListBox.1
    OptionButton Forms.OptionButton.1
    ScrollBar Forms.ScrollBar.1
    SpinButton Forms.SpinButton.1
    TextBox Forms.TextBox.1
    ToggleButton Forms.ToggleButton.1

    Программное добавление элементов управления

    Для реализации примеров необходимо открыть рабочую книгу Excel с поддержкой макросов (.xls или .xlsm) и в редакторе VBA создать пользовательскую форму UserForm1.

    Пример 1
    Программное создание элемента управления TextBox с присвоением его свойству «Text» значения «Привет!». Так как это свойство TextBox является свойством по умолчанию, вместо «myCont.Text» используем в коде для присвоения значения только имя переменной «myCont».

    Sub Primer_1()

    Dim myCont As Control

    Set myCont = UserForm1.Controls.Add(«Forms.TextBox.1», «myTextBox1»)

    myCont = «Привет!»

    UserForm1.Show

    End Sub

    Так как мы присвоили вновь созданному элементу управления TextBox имя «myTextBox1», теперь обращаться к нему можно и по этому имени, например:
    UserForm1.Controls("myTextBox1") = "Привет!"
    Этой строкой можно заменить строку:
    myCont = "Привет!"

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

    Пример 2
    Создание с помощью кода VBA Excel группы элементов управления ComboBox, присвоение соответствующим параметрам значений размеров и отступов.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    Sub Primer_2()

    Dim myCont(1 To 5) As Control, i As Byte

      With UserForm1

        For i = 1 To 5

          Set myCont(i) = .Controls.Add(«Forms.ComboBox.1»)

            With myCont(i)

    ‘Заполняем все ComboBox одинаковыми списками

              .List = Array(«Привет1», «Привет2», _

              «Привет3», «Привет4», «Привет5»)

    ‘Добавляем размеры и отступы

              .Width = 200

              .Height = 20

              .Left = 20

              .Top = i * 10 + (i — 1) * 20

            End With

        Next

        .Caption = «Пять полей со списком»

        .Height = 190

        .Width = 250

        .Show

      End With

    End Sub

    Excel VBA Userform — Простые макросы Excel

    Добавить элементы управления | Показать пользовательскую форму | Назначьте макросы | Протестируйте пользовательскую форму

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

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

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

    1. Откройте редактор Visual Basic. Если обозреватель проекта не отображается, щелкните «Просмотр», «Обозреватель проекта».

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

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

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

    Контроль Имя Подпись
    Форма пользователя DinnerPlannerUserForm Планировщик ужина
    Текстовое поле NameTextBox
    Текстовое поле PhoneTextBox
    Список CityListBox
    Поле со списком DinnerComboBox
    Флажок DateCheckBox1 13 июня
    Флажок DateCheckBox2 20 июня
    Флажок DateCheckBox3 27 июня
    Рама CarFrame Автомобиль
    Опциональная кнопка CarOptionButton1 Есть
    Опциональная кнопка CarOptionButton2 Нет
    Текстовое поле MoneyTextBox
    Кнопка вращения MoneySpinButton
    Командная кнопка OK Кнопка ОК
    Командная кнопка ClearButton Прозрачный
    Командная кнопка Кнопка отмены Отмена
    7 этикеток Менять не нужно Имя :, Номер телефона: и т. Д.

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

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

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

    Private Sub CommandButton1_Click ()

    DinnerPlannerUserForm.Show

    End Sub

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

    1. Откройте редактор Visual Basic.

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

    3. В раскрывающемся списке слева выберите Userform. В правом раскрывающемся списке выберите «Инициализировать».

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

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


    NameTextBox.Value = «»


    PhoneTextBox.Значение = «»


    CityListBox.Clear


    С CityListBox
    .AddItem «Сан-Франциско»
    . .AddItem «Окленд»
    . .AddItem «Richmond»
    Конец с


    DinnerComboBox.Clear


    С DinnerComboBox
    .AddItem «Итальянский»
    . .AddItem «Китайский»
    . .AddItem «Фритты и мясо»
    Заканчивается на
    . DateCheckBox1.Value = False
    DateCheckBox2.Значение = Ложь
    DateCheckBox3.Value = False


    CarOptionButton2.Value = True


    MoneyTextBox.Value = «»


    NameTextBox.SetFocus

    End Sub

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

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

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

    1. Откройте редактор Visual Basic.

    2. В проводнике проекта дважды щелкните DinnerPlannerUserForm.

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

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

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

    MoneyTextBox.Text = MoneySpinButton.Value

    Конечная подписка

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

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

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

    Private Sub OKButton_Click ()

    Dim emptyRow As Long


    Лист1.Активировать


    emptyRow = WorksheetFunction.CountA (Диапазон («A: A»)) + 1


    Ячейки (emptyRow, 1) .Value = NameTextBox.Value
    Ячейки (emptyRow, 2) .Value = PhoneTextBox.Value
    Ячейки (emptyRow, 3) .Value = CityListBox.Value
    Ячейки (emptyRow, 4) .Value = DinnerComboBox.Value

    Если DateCheckBox1.Value = True Then Cells (emptyRow, 5) .Value = DateCheckBox1.Caption

    Если DateCheckBox2.Value = True Then Cells (emptyRow, 5) .Value = Cells (emptyRow, 5) .Value & «» & DateCheckBox2.Caption

    Если DateCheckBox3.Value = True, то ячейки (emptyRow, 5) .Value = Cells (emptyRow, 5) .Value & «» & DateCheckBox3.Caption

    Если CarOptionButton1.Value = True, то
    Ячейки (emptyRow, 6) .Value = «Да»
    Остальное
    Cells (emptyRow, 6) .Value = «No»
    End If

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

    End Sub

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

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

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

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

    Вызов UserForm_Initialize

    Конечная подписка

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

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

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

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

    Разгрузить меня

    Конец подписки

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

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

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

    Результат:

    .

    Элементы управления пользовательской формы VBA — Руководство для всех

    «Я хочу думать, что есть кто-то со здравым смыслом у пульта управления» — Мартин Фельдштейн


    Вебинар

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

    ( Примечание: участники веб-сайта имеют доступ к полному архиву вебинаров.)


    Введение

    В первом посте о UserForms мы рассмотрели общее использование UserForm.

    В этом посте мы рассмотрим отдельные элементы управления VBA и способы их использования. Мы рассмотрим наиболее часто используемые элементы управления VBA. Это Checkbox, ComboBox, CommandButton, Label, ListBox и TextBox. Для каждого элемента управления я расскажу об их наиболее распространенном использовании и предоставлю множество примеров кода, которые вы можете использовать в своих собственных проектах.


    Элементы управления UserForm

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

    1. Перейдите в диалог Toolbox — если он не отображается, выберите View-> Toolbox .
    2. Щелкните значок элемента управления, который хотите добавить — значок будет отображаться выбранным (нажатым), пока вы не щелкните другой значок.
    3. Наведите курсор на пользовательскую форму.
    4. Удерживая нажатой левую кнопку мыши, перетащите элемент управления до нужного размера.
    5. Чтобы выбрать или переместить элемент управления, щелкните значок Select Objects (крайний левый) на панели инструментов, и это переведет вас в режим выбора.



    В следующей таблице показан список общих элементов управления

    Контроль Описание
    CheckBox Включение / выключение элемента
    ComboBox Позволяет выбирать из списка элементов
    CommandButton Щелкните для выполнения действия
    Этикетка Отображает текст
    ListBox Позволяет выбирать из списка элементов
    Текстовое поле Разрешает ввод текста


    Свойства элементов управления

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

    1. Окно свойств .
    2. Панель инструментов Диалог.
    3. Окно дизайна UserForm .



    Пользовательская форма Windows



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

    Чтобы изменить имя UserForm, выполните следующие действия

    1. Щелкните пользовательскую форму в окне проекта или щелкните саму пользовательскую форму.
    2. Щелкните в поле (Имя) окна свойств.
    3. Введите новое имя в это поле.


    Добавление кода

    Посмотреть код UserForm можно следующими способами

    1. Дважды щелкните UserForm.
    2. Щелкните правой кнопкой мыши саму UserForm и выберите Просмотреть код .
    3. Щелкните правой кнопкой мыши пользовательскую форму в окнах проекта и выберите Просмотреть код .


    Общие функции управления

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

    Функция Работа Пример
    Включено Включить / выключить элемент управления combobox.Enabled = True
    textbox.Enabled = False
    SetFocus Устанавливает фокус на элемент управления
    (нельзя использовать с меткой)
    поле со списком.SetFocus
    Visible Показать / скрыть элемент управления combobox. Visible = True
    textbox. Visible = False


    https://excelmacromastery.com/
    Флажок Private SubAddNotes_Click ()
    
        'Включить текстовое поле, если флажок установлен в значение true
        Если checkboxAddNotes.Value = True, то
            textboxNotes.Enabled = True
            textboxNotes.SetFocus
        Еще
            textboxNotes.Включено = Ложь
        Конец, если
             
    Конец подписки
     


    Чекбокс


    Шпаргалка по CheckBox

    Функция Работа Пример
    Caption Получить / установить текст checkbox.Caption = «Apple»
    Значение Получить отмеченное состояние Если флажок.Значение = True, затем
    Значение Установить флажок отмечен . Значение = False



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




    Включение и выключение флажка

    Мы можем включить или выключить CheckBox, установив для него значение true или false

    'Установите чек
    CheckBoxTerms.Значение = Истина
    
    'Установите чек
    CheckBoxTerms.Value = False
     


    Событие флажка с примером

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



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

    Private Sub CheckBoxTerms_Click ()
    
    Конец подписки
     



    Следующий код показывает пример того, как мы его используем

    https: // excelmacromastery.com /
    Private Sub CheckBoxTerms_Click ()
     
        Если checkboxTerms.Value = True, то
           buttonOk.Enabled = Верно
        Еще
           buttonOk.Enabled = Ложь
        Конец, если
     
    Конец подписки
     


    Этикетка

    Шпаргалка по этикетке

    Функция Работа Пример
    Текст Получить \ Установить текст textbox1.Text = «Apple»

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


    Установка текста ярлыка

    Вы можете установить текст Label в коде, используя свойство Caption

    LabelAddress.Caption = "Адрес клиента"
     


    Текстовое поле


    Памятка по TextBox

    Функция Работа Пример
    Текст Установить текст textbox1.Text = «Apple»
    Текст Получить текст sFruit = textbox1.Text
    Значение Установить текст textbox1.Value = «Apple»
    Value Получить текст sFruit = textbox1.Value


    Установка текста текстового поля

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

    TextBoxNotes.Value = "Это были лучшие времена".
    
    sNotes = TextBoxNotes.Value
     



    Текстовое поле имеет свойства «Текст» и «Значения». Это одно и то же.

    Из MSDN: для TextBox любое значение, которое вы назначаете свойству Text, также присваивается свойству Value.



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

    Например, если пользователь собирается выбрать год между 2010 и 2019 годами, мы должны использовать ComboBox / Listbox, который содержит только действительные годы. Тогда нам не нужно проверять формат и диапазон ввода пользователя.


    Создание только числового TextBox

    Следующий код запрещает пользователю вводить что-либо, кроме числа, в текстовое поле

    https://excelmacromastery.com/
    Текстовое поле Private SubComments_KeyPress (_
                ByVal KeyAscii как MSForms.ReturnInteger)
             
        Выберите Case KeyAscii
            Регистр vbKey9
                KeyAscii = 0
                Звуковой сигнал
        Конец Выбрать
             
    Конец подписки
     


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

    Если вы выбираете дату как пользователь, вы можете использовать элемент управления MonthView . Это один из дополнительных элементов управления, поставляемых с Visual Basic. Он работает довольно хорошо и выглядит как стандартное средство выбора даты, которое вы видите в большинстве приложений.

    Чтобы добавить элемент управления MonthView:

    1. Откройте редактор Visual Basic и убедитесь, что панель инструментов видна («Просмотр» -> «Панель инструментов», если она не видна).
    2. Выберите Инструменты , а затем Дополнительные элементы управления в меню.
    3. Отметьте Microsoft MonthView Control, версия 6.0 .
    4. Элемент управления MonthView теперь появится на панели инструментов.



    Чтобы получить выбор пользователя из элемента управления MonthView, вы можете использовать событие DateClick , поскольку следующий код показывает

    https: // excelmacromastery.com /
    Частная подписка MonthView1_DateClick (_
         ByVal DateClicked As Date)
     
        'Сохранить дату в текстовом поле
        TextBox1.Value = MonthView1.Value
     
    Конец подписки
     



    Для получения дополнительной информации о MonthView см. Следующие ссылки:

    Проблемы с добавлением MonthView — см. Верхний ответ на этой странице StackOverflow

    MSDN — Использование элемента управления MonthView


    ComboBox


    Шпаргалка по ComboBox

    Функция Работа Пример
    AddItem Добавить элемент список.AddItem «Испания»
    Очистить Удалить все элементы комбинированный. Очистить
    Список Добавить диапазон элементов combo.List = Range («A1»). Значение
    ListCount Получить количество элементов cnt = combo.ListCount
    ListIndex Получить / установить выбранный элемент Idx = combo.ListIndex
    combo.ListIndex = 0
    ListRows Получить / установить количество отображаемых элементов NoItems = combo.ListRows
    combo.ListRows = 12
    RemoveItem Удалить элемент combo.RemoveItem 1
    Value Получить значение выбранного элемента Dim sCountry As String
    sCountry = combo.Value



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

    В большинстве случаев мы хотим сделать четыре вещи с ComboBox \ ListBox

    1. Заполнить данными при загрузке формы
    2. Предварительный выбор элемента.
    3. Получить текущий выбранный элемент (ы).
    4. Выполнить действие, когда пользователь выбирает другой элемент.


    Заполнение комбинированного списка данными

    Мы можем заполнить поле со списком по одному элементу за раз, используя свойство AddItem .

    comboBoxFruit.AddItem "Яблоко"
    comboBoxFruit.AddItem "Груша"
     



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

    Затемнить ячейку как диапазон
    'Заполните элементы первой буквой A
    Для каждой ячейки в Sheet1.Range ("A1: A50")
        Если Left (cell.Value, 1) = "A", то
            comboBoxFruit.AddItem cell.Value
        Конец, если
    следующий
     


    Заполнение ComboBox из диапазона

    Если вы хотите заполнить ComboBox из всего диапазона, вы можете сделать это в одной строке кода

    comboBoxFruit.List = Sheet1.Range ("A1: A5"). Значение
     



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

    'Очистить любой существующий элемент
    comboBoxFruit.Clear
    'Заполните ComboBox
    comboBoxFruit.List = Sheet1.Range ("A1: A5"). Значение
     


    Заполнение ComboBox — без дубликатов

    Если в нашем диапазоне несколько записей, мы не хотим добавлять один и тот же элемент несколько раз. Мы можем сделать это с помощью словаря

    .
    https: // excelmacromastery.com /
    Sub TestDuplicates ()
    
        'очистить существующие значения
        comboBoxFruit.Clear
        
        'Заполнить данный ComboBox из заданного диапазона, игнорируя дубликаты
        FillComboNoDuplicates comboBoxFruit, Sheet1.Range ("A1: A10")
        
    Конец подписки
    
    Sub FillComboNoDuplicates (cbo как ComboBox, rg как диапазон)
        
        'Создать словарь
        Dim dict As Object
        Установите dict = CreateObject ("Scripting.Dictionary")
        
        Тусклая ячейка как диапазон, sItem как строка
        'Просмотрите каждый элемент в диапазоне
        Для каждой ячейки в rg
            sItem = Trim (ячейка.Ценность)
            'проверить, существует ли уже элемент в словаре
            Если dict.Exists (sItem) = False, то
                'Если не существует, добавить в словарь и поле со списком
                dict.Add sItem, 1
                cbo.AddItem sItem
            Конец, если
        следующий
        
        'Очистите словарь, поскольку он нам больше не нужен
        Установить dict = ничего
    
    Конец подписки
     


    VBA ComboBox — полный пример 1

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





    Мы хотим, чтобы пользователь выбрал любую страну. Когда они это сделают, наша UserForm отобразит столицу этой страны. На скриншоте ниже показан и пример этого





    Первое, что мы хотим сделать, это заполнить страны ComboBox при загрузке формы. Мы делаем это с помощью события UserForm_Initialize, которое мы рассмотрели в первом посте на VBA UserForms.

    Частная подписка UserForm_Initialize ()
        
    Конец подписки
     



    Мы можем использовать следующий код, чтобы заполнить ComboBox из диапазона и установить выбранный элемент как первый. (Обратите внимание, что нам не нужно очищать ComboBox здесь, поскольку событие Initialize используется только один раз — при создании UserForm.)

    https://excelmacromastery.com/
    Частная подписка UserForm_Initialize ()
        
        'Добавить массив в поле со списком
        ComboBoxCountry.List = Sheet1.Range ("A1: A196"). Значение
        
        'Установить первый элемент в поле со списком
        ComboBoxCountry.ListIndex = 0
        
    Конец подписки
     



    Когда пользователь выбирает страну, мы хотим отобразить столицу в текстовом поле. Мы используем Change Event ComboBox. Чтобы создать это, просто дважды щелкните ComboBox, и он будет создан автоматически.

    https://excelmacromastery.com/
    Частный суб ComboBoxCountry_Change ()
        
        'Получить значение из поля со списком
        Dim sCountry как строка
        sCountry = ComboBoxCountry.Ценность
        
        'Получить диапазон
        Dim rg As Range
        Установите rg = Sheet1.Range ("A1: B196")
        
        'Используйте VLookup, чтобы найти столицу страны
        TextBoxCapital.Value = _
            WorksheetFunction.VLookup (страна, rg, 2)
        
    Конец подписки
     



    Когда пользователь нажимает Ok , мы записываем выбранные значения в рабочий лист Results

    https://excelmacromastery.com/
    Кнопка Private SubOK_Click ()
        
        С shResult
    
            'Напишите страну, в которой была выбрана
            .Диапазон ("A1") = ComboBoxCountry.Value
            
            'Напишите позицию выбранной страны
            .Range ("A3") = ComboBoxCountry.ListIndex
    
            'Напишите столицу страны
            .Range ("A2") = TextBoxCapital.Value
    
        Конец с
    
        'Закройте форму
        Разгрузить меня
        
    Конец подписки
     


    VBA ComboBox — полный пример 2

    Очень распространенная задача — обновить второй ComboBox на основе выбора первого.





    Представьте, что у нас есть два ComboBox — один содержит название страны, а другой — список из трех городов из этой страны.





    Когда пользователь выбирает страну, мы обновляем в ComboBox города города из этой страны.



    Наши данные хранятся следующим образом



    Каждый раз, когда значение ComboBox «Страна» устанавливается на страну, мы обновляем ComboBox «Город», чтобы он содержал три города из этой страны.Это происходит в двух местах

    1. Когда мы загружаем поле со списком страны — событие инициализации
    2. Когда пользователь выбирает страну — событие изменения



    Код для них следующий

    https://excelmacromastery.com/
    Частная подписка UserForm_Initialize ()
        
        'Добавить массив в поле со списком
        ComboBoxCountry.List = shCity.Range ("A2: A5"). Значение
        ComboBoxCountry.ListIndex = 0
        
        'Заполните город ComboBox
        FillCityCombo ComboBoxCountry.ListIndex
        
    Конец подписки
    
    Частный суб ComboBoxCountry_Change ()
        'Заполните город ComboBox
        FillCityCombo ComboBoxCountry.ListIndex
    Конец подписки
     



    В обоих случаях мы вызываем наш FillCityCombo Sub, чтобы заполнить город ComboBox. Требуется один параметр, который представляет собой позицию текущего выбора страны.

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

    https: // excelmacromastery.com /
    Sub FillCityCombo (строка ByVal по длине)
    
        'Получить диапазон города из заданной строки
        Dim rgCities As Range
        Установите rgCities = shCity.Range ("B2: D2"). Offset (row)
        
        'Очистить текущий список городов
        ComboBoxCity.Clear
        
        'Мы транспонируем диапазон столбцов, например B2: D2 в строки так
        'мы можем добавить в ComboBox
        ComboBoxCity.List = _
                WorksheetFunction.Transpose (rgCities)
                
        'Установить первый город в списке
        ComboBoxCity.ListIndex = 0
    
    Конец подписки
     


    Список

    ListBox используется почти так же, как ComboBox. Код в разделе ComboBox выше также будет работать для ListBox.


    Шпаргалка ListBox

    Функция Работа Пример
    AddItem Добавить элемент listbox.AddItem «Spain»
    Очистить Удалить все элементы Список.Прозрачный
    ColumnCount Установить количество видимых столбцов ComboBox1.ColumnCount = 2
    ColumnHeads Сделать видимой строку столбца ComboBox1.ColumnHeads = True
    Список Диапазон до списка
    От списка до диапазона
    Listbox.List = Диапазон («A1: A4»). Значение
    Диапазон («A1: A4»). Значение = Listbox.List
    ListCount Получить количество элементов cnt = listbox.ListCount
    ListIndex Получить / установить выбранный элемент Idx = listbox.ListIndex
    combo.ListIndex = 0
    RemoveItem Удалить элемент listbox. Удалить 1
    RowSource Добавить диапазон значений из рабочего листа ComboBox1.RowSource = Sheet1.Range («A2: B3»). Адрес
    Значение Получить значение выбранного элемента Dim sCountry As String
    sCountry = listbox.Стоимость

    Мы можем использовать ListBox так же, как мы использовали ComboBox. Разница в том, как они отображаются

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



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





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

    КОД ПОЛЬЗОВАТЕЛЯ
    https://excelmacromastery.com/
    Частная коллекция m_CollCountries
    
    'ОК нажмите событие
    Кнопка Private SubOk_Click ()
        'Получить выбор пользователя
        Установите m_CollCountries = GetSelections
        'Скрыть пользовательскую форму
        Спрятать
    Конец подписки
    
    'Возвращает коллекцию стран
    Страны получения собственности () Как коллекция
        Установить страны = m_CollCountries
    Конечная собственность
    
    'Получить выбор из ListBox
    Частная функция GetSelections () как коллекция
        
        Dim collCountries как новая коллекция
        Тусклый я как долго
        
        'Просмотрите каждый элемент в списке
        Для i = 0 в ListBoxCountry.ListCount - 1
            'Проверить, выбран ли элемент в позиции i
            Если ListBoxCountry.Selected (i) Тогда
                'Добавить предмет в нашу коллекцию
                collCountries.Add ListBoxCountry.List (i)
            Конец, если
        Далее я
        
        Установите GetSelections = collCountries
        
    Конечная функция
     


    'ОСНОВНОЙ КОД ПРОЦЕДУРЫ
    https://excelmacromastery.com/
    'Sub для отображения UserForm
    Sub DisplayMultiCountry ()
        
        Dim FRM как новый пользовательFormCountryMulti
        отр.Показать
    
        'Распечатать коллекцию
        PrintCollection из стран
        
    Конец подписки
    
    'Sub используется для печати коллекции в непосредственном окне (Ctrl + G)
    Public Sub PrintCollection (ByRef coll как коллекция)
        
        Debug.Print "Пользователь выбрал следующие страны:"
        Dim v как вариант
        Для каждого v In coll
            Отладка.Печать v
        следующий
        
    Конец подписки
     



    На этом мы завершаем два сообщения в UserForm (см. Первый здесь).

    Надеюсь, они вам пригодились. Если у вас есть какие-либо вопросы или вопросы, пожалуйста, оставьте комментарий или напишите мне по адресу [email protected]


    Что дальше?

    Бесплатное руководство по VBA Если вы новичок в VBA или хотите отточить свои существующие навыки VBA, почему бы не попробовать The Ultimate VBA Tutorial.

    Связанное обучение: Получите полный доступ к обучающим вебинарам по Excel VBA и всем учебным материалам.

    ( ПРИМЕЧАНИЕ: Планируете создание приложения VBA или управление им? Узнайте, как создать 10 приложений Excel VBA с нуля.)


    Получите бесплатную электронную книгу

    Не стесняйтесь подписаться на мой информационный бюллетень и получить эксклюзивный контент VBA, который вы не можете найти здесь, в блоге, а также бесплатный доступ к моей электронной книге How to Ace the 21 Most Common Question in VBA , которая полна примеров, которые вы можете использовать в своем собственном коде.




    .

    Excel VBA Userform и диапазоны

    Вы можете использовать элемент управления RefEdit в Excel VBA , чтобы получить диапазон от пользователя. В Userform мы собираемся создать цвета минимального значения из диапазона , хранящегося в элементе управления RefEdit.

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

    1. Откройте редактор Visual Basic. Если обозреватель проекта не отображается, щелкните «Просмотр», «Обозреватель проекта».

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

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

    Примечание. Если в вашем наборе инструментов нет элемента управления RefEdit, установите ссылку на элемент управления RefEdit. Щелкните «Инструменты», «Ссылки» и установите флажок «Ref Edit Control».

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

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

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

    UserForm1.Show

    End Sub

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

    6. Откройте редактор Visual Basic.

    7. В проводнике проекта щелкните правой кнопкой мыши UserForm1 и выберите команду Просмотреть код.

    8. В левом раскрывающемся списке выберите Userform. В правом раскрывающемся списке выберите «Инициализировать».

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

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

    Sheet1.Cells.Font.Color = vbBlack
    UserForm1.RefEdit1.Text = Selection.Address

    End Sub

    Объяснение: первая строка кода изменяет цвет шрифта всех ячеек на листе 1 на черный. Вторая строка кода получает адрес текущего выделения и отображает его в элементе управления RefEdit.

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

    10. В проводнике проекта дважды щелкните UserForm1.

    11. Дважды щелкните кнопку Go.

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

    Private Sub CommandButton1_Click ()

    Dim addr As String, rng, cell As Range, минимум Как Double

    адрес = RefEdit1.Значение
    Set rng = Range (addr)
    минимум = WorksheetFunction.Min (rng)

    Для каждой ячейки In rng
    Если cell.Value = minimum То cell.Font.Color = vbRed
    Следующая ячейка

    End Sub

    Объяснение: сначала мы получаем адрес из элемента управления RefEdit и сохраняем его в строковой переменной addr. Затем мы устанавливаем rng в диапазон, указанный в элементе управления RefEdit. Затем мы используем функцию рабочего листа Min, чтобы найти минимальное значение в диапазоне.Наконец, мы раскрашиваем минимальное значение (я) с помощью цикла.

    13. Дважды щелкните кнопку Отмена.

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

    Private Sub CommandButton2_Click ()

    Выгрузить меня

    End Sub

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

    15. Протестируйте пользовательскую форму.

    Результат:

    .

    VBA Показать пользовательскую форму с помощью метода Show

    Знакомство с пользовательской формой VBA. Показать | Как показать пользовательскую форму VBA | Модальный вариант | Вызов пользовательской формы из пользовательской формы | Запускать макросы из пользовательских форм | Выгрузка пользовательской формы | Последние мысли

    Введение в пользовательскую форму VBA. Показать

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

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


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

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

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


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

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

      Подложка show_userform1 ()
    
    Пользовательская форма1.Показать
    
    Концевой переводник  

    Создавайте эффективные макросы с помощью нашего бесплатного комплекта разработчика VBA
    Здесь есть что распаковать. Чтобы сэкономить время и по-настоящему хорошо освоить VBA, убедитесь, что вы получили наш бесплатный VBA Developer’s Kit ниже. В нем полно ярлыков, советов и встроенных макросов, которые упрощают написание VBA.


    Когда вы запустите этот модуль, появится это поле:


    Наша простая форма пользователя отображается над ячейками таблицы

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

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

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

      Частная UserForm_Initialize ()
    
    Userform1.CommandButton1.Caption = "Нажми меня."
    
    Концевой переводник  

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


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

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


    Три окна, в которых должны появиться наш код и макет пользовательской формы

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


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

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

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


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

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

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


    Это наша очень простая форма пользователя2

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

      Частная подпрограмма CommandButton1_Click ()
    Userform1.Show
    Концевой переводник  

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


    Объекты отмечены красной стрелкой, события — синей.


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

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

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

      Private Sub CommandButton1_MouseMove (кнопка ByVal как целое число, сдвиг ByVal как целое число, ByVal X как одиночное, ByVal Y как одиночное)
    
    basic_get_user_file 'имя общедоступного макроса для вызова
    
    Конец подписки
    
    
    Sub basic_get_user_file ()
    
    Dim fileStringBasic As String
    
    fileStringBasic = Application.GetOpenFilename ()
    
    Если fileStringBasic <> "False" Тогда
        'ваш код для одного файла здесь
    Конец, если
    
    Концевой переводник  

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

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


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

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

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

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *