Приведённые практические работы по программированию могут быть использованы при изучении элементов выбора Visual Basic. Списки целесообразно изучать после знакомства с переключателями (OptionButton) и флажками (CheckBox).
При объяснении нового материала удобно использовать распечатки с изложением теоретического материала и примерами программ, которые выдаются каждому студенту (ученику), либо методические пособия (мы используем авторское пособие “Практикум по решению задач в среде Visual Basic”, часть 1, 2).
Приведённые практические работы рассчитаны на 3 занятия по 2 часа. Задания самостоятельной работы можно использовать в качестве домашних заданий.
В Visual Basic существует 2 вида списков:
- комбинированный список ComboBox;
- список ListBox.
1. Комбинированный список ComboBox
Комбинированный список представляет комбинацию раскрывающегося списка и текстового поля. Пользователь имеет возможность выбрать определенное значение какого-либо параметра в раскрывающемся списке или ввести необходимое значение в текстовое поле. Если элементы не помещаются в границах стандартного окна, то автоматически появляются полосы прокрутки, с помощью которых можно выбирать требуемый элемент в списке.
Свойство Style задаёт внешний вид комбинированного списка (по умолчанию оно равно 0 – элемент ComboBox отображается в виде текстового поля со стрелкой справа, позволяющей развернуть весь список и выбрать требуемое значение). Если Style = 1, то постоянно отображается весь список (или список с полосой прокрутки).
Основные свойства ComboBox
Название
Описание
List
ListIndex
ListCount
NewIndex
Sorted
Style
0 – Dropdown Combo (раскрывающийся комбинированный список);
1 – Simple Combo (простой комбинированный список);
2 – Dropdown List (раскрывающийся список).
Text
AddItem
Clear
RemoveItem
Для добавления нового элемента в список используется метод AddItem.
Пример: Combo1.AddItem “Пение” – добавить в список Combo1 слово Пение.
Добавляемые в список элементы имеют тип String; [index] – порядковый номер в списке, под которым будет находиться новый элемент (необязательный параметр).
Добавить элементы в комбинированный список можно также на этапе разработки с помощью свойства List. Для добавления очередного элемента в список нужно ввести этот элемент в свойстве List и нажать комбинацию клавиш Ctrl + Enter.
2. Список ListBox
Данный элемент применяется в том случае, когда пользователю необходимо выбрать один элемент из имеющегося списка для выполнения определенных действий. Объекты ListBox используются обычно в сочетании с управляющими кнопками, которые позволяют обрабатывать элементы списка (добавлять, удалять и т. д.).
В отличие от ComboBox список ListBox можно создать многоколончатым и осуществлять выбор нескольких элементов одновременно.
Свойство MultiSelect позволяет задать режим множественного выбора элементов в списке. В режиме MultiSelect = 1 добавление элемента в выделенную группу или исключение из нее осуществляется с помощью щелчка мыши или нажатия пробела. Если MultiSelect = 2, то в этом случае выделение элементов выполняется по аналогии с программой Проводник:
- щелчок мыши при нажатой клавише Shift позволяет выделить несколько подряд расположенных элементов;
- щелчок мыши при нажатой клавише Ctrl даёт возможность выделять группу несмежных элементов списка.
Основные свойства элемента ListBox
Название
Описание
Columns
0 – одноколончатый список с вертикальной прокруткой;
1 – одноколончатый список с горизонтальной прокруткой;
>1 – многоколончатый список с горизонтальной прокруткой
Selected
MultiSelect
0 – None (обычный список);
1 -Simple (простой множественный выбор – щелчок мыши или нажатие Пробел выделяет очередной элемент или снимает выделение);
2 – Extended (расширенный множественный выбор) – выделение с использованием вспомогательных клавиш.
см. табл. 2.53
Методы ListBox аналогичны методам ComboBox.
Практическая работа 1. Проект “Результаты сессии”
Задание: создать проект, содержащий 3 списка: список студентов группы; список студентов, получивших зачёт и список неаттестованных. Двойным щелчком мыши в списке студентов (List1) выбирается фамилия и добавляется в список “Зачёт” (List2). Двойным щелчком в списке “Зачёт” фамилия возвращается назад. Кнопкой “Добавить в список” фамилия, введённая в текстовое поле Text1, заносится в список List1. Кнопка “н/а” заносит выбранную фамилию из списка студентов в список List3 ( н/а).
Private Sub Form_Load() ‘загрузка формы
List1.AddItem "Чесноков": List1.AddItem "Симонов"
List1.AddItem "Трушков": List1.AddItem "Морозова"
Private Sub List1_DblClick() ‘перенести из списка в зачёт
List1.RemoveItem List1.ListIndex ‘удалить из списка
Private Sub List2_DblClick() ‘перенести назад в Список из Зачёт
Private Sub List3_DblClick() ‘перенести назад в список из н/а
Private Sub Command1_Click() ‘добавить в список из текст. поля
Private Sub Command3_Click() ‘добавить в н/а
List1.RemoveItem List1.ListIndex ‘удалить из списка
Задания
- Добавьте в проект список оценок (2, 3, 4, 5) – List4.
- Измените проект таким образом, чтобы можно было добавлять в результаты фамилию и оценку ученика.
- Создайте кнопку “Очистить результаты”.
Примерный вид формы показан на рисунке.
Практическая работа 2. Проект “Переводчик”
Задание: создать проект для проверки знания иностранных слов (англо-русский и русско-английский переводчик).
Элементы интерфейса проекта:
- Комбинированные списки Combo1 и Combo2 – для хранения русских и английских слов. Индексы русских слов в списке должны соответствовать индексам соответствующих им английских слов.
- Текстовое поле Text1 – для вывода случайного слова из списка, которое необходимо перевести.
- Текстовое поле Text2 – для вывода комментария “Верно” или “Неверно”.
- Текстовые поля Text3, Text4 – для вывода количества вопросов и верных ответов.
- Таймер Timer1 – для временной задержки при выводе очередного вопроса.
- Image1 – для вывода рисунка, соответствующего слову.
- Элемент MMControl1 – для воспроизведения звука.
Элемент MMControl является дополнительным компонентом VB (Activ X). Для его установки необходимо:
- Открыть в меню Проект – Компоненты вкладку Управление (Control);
- Установить флажок MicrosoftMultimedia Control 6.0;
- На панели элементов управления появится новый значок MMControl.
Рисунки к проекту сохраните в папке с проектом в порядке следования слов в списке Combo1:
Ris0.jpg – рисунок к первому слову списка;
Ris1.jpg – рисунок ко второму слову списка и т.д.
Для определения имени файла рисунка в проекте используем переменную Path:
Path = "Ris" & Mid(Str(n), 2, 1) & ".jpg"
Функция Mid используется для того, чтобы убрать пробел перед числом в имени файла, т.к. функция Str(n) для положительного числа формирует строку с пробелом перед числом. Таким образом, получаем неверное имя файла Ris 0.jpg, вместо Ris0.jpg.
Рассмотрим основные процедуры проекта.
1) В процедуре загрузки формы нужно заполнить списки русских и английских слов.
Dim n, k, z, p As Integer, Path As String
‘n – индекс слова в списке; k – количество верных ответов; z – кол. вопросов; p – признак направления перевода; Path – путь к файлу с рисунком на диске
Private Sub Form_Load()
Combo1.AddItem "собака": Combo1.AddItem "дельфин"
Combo1.AddItem "осёл": Combo1.AddItem "красный"
Combo1.AddItem "зеленый": Combo2.AddItem "Dog"
Combo2.AddItem "Dolphin": Combo2.AddItem "Donkey"
Combo2.AddItem "Red": Combo2.AddItem "Green"
k = 0 ’количество верных ответов
z = 0 ‘количество вопросов
2) При выборе кнопки “Перевод рус/англ” должно появляться русское слово. Для данного слова нужно найти перевод в списке английских слов. Список русских слов при этом должен скрываться.
Private Sub Command5_Click() ‘Перевод рус/англ
p = 1 ‘признак перевода – рус/англ
Combo1.Visible = False ‘скрыть список русских слов
Combo2.Visible = True ‘показать список англ. слов
Label1.Caption = "Русское слово"
Timer1.Enabled = True ‘включить таймер
3) В процедуре таймера случайным образом определяем индекс слова в списке слов. Если p=1, то было выбрано направление перевода рус/англ., поэтому слово выбирается из списка русских слов Combo1.
Private Sub Timer1_Timer()
z = z + 1 ‘подсчёт кол. вопросов
n = Int(Rnd * 4) ‘случайный выбор индекса слова в списке слов
If p = 1 Then Text1.Text = Combo1.List(n)
4) Для выбора перевода заданного русского слова пользователь делает щелчок по списку английских слов. Если индекс исходного русского слова n совпадает с индексом слова-перевода, выбранного пользователем, то ответ верный.
Private Sub Combo2_Click() ‘список англ. слов
If n = Combo2.ListIndex Then ‘если ответ верный
Image1.Visible = True ‘показать рисунок
MMControl1.FileName = "da.wav" ‘загрузить звуковой файл
Path = "Ris" & Mid(Str(n), 2, 1) & ".jpg"
Image1.Picture = LoadPicture(Path) ‘загрузить файл с соответствующим рисунком
Else ‘если ответ неверный
MMControl1.Command = "sound" ‘воспроизвести звук. файл
Задания:
- Создайте процедуру кнопки “Перевод англ/рус”.
- Добавьте кнопку Сброс.
- Подберите 2 звуковых файла для подтверждения верного и неверного ответа, подключите эти файлы к проекту.
- Создайте заставку к проекту.
Самостоятельная работа
- Создать проект “Выбор шрифта”, позволяющий выбрать с помощью списков тип шрифта, размер, начертание (свойства): жирный, подчёркнутый, курсив. Выбранные параметры должны применяться к метке Образец.
Свойства шрифта в метке задаются следующими командами:
Label1.Font.Italic = True – установить курсив
Label1.Font.Bold = False – отменить жирный шрифт
Label1.Font.Underline = True – установить подчёркнутый шрифт
Label1.Font = Combo1.Text – применить к метке тип шрифта, выбранный в комбинированном списке 1
Label1.Font.Size = Combo1.Text – применить к метке размер шрифта, выбранный в комбинированном списке 1
Литература
- Глушаков С.В. , Мельников В.В., Сурядный А.С. Программирование в среде Windows. Visual Basic 6.0. М.: ООО “Издательство АСТ”, 2001
- Браун С. Visual Basic. Учебный курс. – Спб.: Питер, 2002
Заполнение ComboBox данными с помощью кода VBA Excel. Добавление значений в поле со списком методом AddItem, из массива и из диапазона рабочего листа. Примеры.
Заполнение ComboBox методом AddItem
Создайте пользовательскую форму UserForm1 и разместите на ней поле со списком ComboBox1. Используйте метод AddItem для заполнения элемента управления значениями:
Скопируйте код и запустите его выполнение, на открывшейся форме раскройте поле со списком, в результате увидите, что элемент управления ComboBox1 заполнен соответствующими значениями:
Заполнение ComboBox значениями из массива
Для заполнения элемента управления ComboBox значениями из массива будем использовать свойство поля со списком List и функцию Array:
Результат выполнения кода будет таким же, как и на предыдущем изображении.
Таким же образом можно использовать не только функцию Array, но и переменную массива, предварительно объявленную и заполненную значениями:
Заполнение ComboBox значениями из ячеек
Для заполнения поля со списком значениями из диапазона ячеек рабочего листа будем использовать свойство комбинированного списка RowSource, предварительно заполнив диапазон "A1:A5" активного листа уже известными значениями:
Чтобы присвоить элементу управления ComboBox значения из диапазона ячеек любого рабочего листа, добавьте ссылку на него перед наименованием диапазона, например, замените "A1:A5" на "Лист1!A1:A5", и поле со списком будет заполнено значениями ячеек "A1:A5", расположенных на листе с именем "Лист1". Имя листа берется из наименования ярлыка.
Более подробно о заполнении данными ComboBox можно прочитать в статье о заполнении ListBox, так как оба эти элемента управления используют одинаковые способы заполнения.
Иногда возникает необходимость заполнения элементов управления ListBox и ComboBox уникальными значениями из диапазона ячеек с повторяющимся содержимым. Смотрите, как отсортировать уникальные элементы из списка с помощью объектов Collection и Dictionary.
Вы можете скачать файл Excel с представленными выше примерами. Файл упакован в ZIP-архив. Для проверки работоспособности кода, непосредственно в редакторе VBA помещайте курсор внутри тела каждой процедуры и нажимайте кнопку «Run Sub».
VBA Excel. ComboBox – заполнение поля со списком : 5 комментариев
Не получился ни один из предложенных вариантов( С чем это может быть связано?
Оксана, скорее всего у вас имена UserForm и ComboBox другие, чем в приведенных примерах. Я сегодня в конце статьи размещу файл для скачивания с этими примерами.
Евгений, подскажите, а где в Вашем примере пользовательская форма? Что бы наглядно посмотреть)
Или это что-то у меня((( При нажатии на Run Sub в вашем файле, у меня тоже нет списка(
UserForm1 находится в папке «Forms» в проводнике редактора VBA под строчкой «ЭтаКнига». Возможно, у вас в параметрах Excel отключены макросы, поэтому коды не работают.
Элемент управления ComboBox VBA языка позволяет формировать комбинированный список. Он предоставляет возможность, как выбирать готовые значения, так и вводить собственные данные. Вообще, стоит сказать, что робота со списками требует отдельной темы по определению, так как наиболее ярким примером создания сложных и комбинированных списков является – формирование базы данных.
Однако и тут есть один момент – большая часть возможностей языка VBA отходит на задний план. Даже продукт Microsoft Access (работа с базами данных), который в былые времена я скрупулезно изучал на уроках информатики, мне на практике ни разу не пригодился.
Поэтому, и в этой статье я не буду вникать во все премудрости компонента ComboBox.
Базовые свойства элемента управления ComboBox VBA языка:
- ColumnCount – позволяет задать количество столбиков в списке
- ColumnWidth – ширина столбиков
- ColumnHeads – определяет, отображать (значение true) или не отображать (значение false) заголовки столбиков.
- RowSource – позволяет задать диапазон для элементов списка
- Value и Text – собственно, текущее значение, что хранится в списке.
Как и для компонента TextBox, для ComboBox главным событием является Change. Событие Change возникает при вводе данных в список.
Ладно, пора приступать к практике. Сначала мы напишем пример использования объекта языка VBA ComboBox в Excel, а потом в Word.
VBA ComboBox Excel
И так, добавьте в окно Проекта новый модуль и новую форму. Модуль назовите ComboBox, а форму – CB_Form, за имена отвечает свойство Name. В редакторе кода для модуля пропишите следующую процедуру:
Процедура сделает форму видимой.
Теперь нужно приступить к созданию и настройке формы. Как она выглядит, вы можете просмотреть на картинке, но… для “слепого” браузера я ее опишу.
Параметры формы (UserForm): название (Caption) – работа с ComboBox в VBA, ширина – 340, высота – 190.
Параметры надписи (Label): Имя (Name) L_CB, свойство Caption оставляете пустым, ширина 324, высота 30, отступ слева и сверху равен 6.
Далее нам следует добавить четыре элемента управления vba ComboBox excel, разместите их так: по два в одну строку, имена для каждого компонента задайте такие: CB_A, CB_B, CB_C и CB_D. Я выбрал такие имена потому, что в каждом списке будет отображаться содержимое текущего листа Excel для колонок A, B, C и D.
Это важно. Позаботьтесь, что бы содержимое колонок A-B не было пустым и что бы количество в них элементов не было слишком огромным, достаточно 100 записей максимум. В противном случае у вас возникнут ошибки.
Для наглядности над каждым объектом ComBox vba можете поставить надписи вида: Ячейка А, Ячейка В и так далее.
В самом низу, разместите, кнопку с именем CommandButton1 и напишите на ней “Объединить”.
Ладно, теперь в редакторе кода для форму пропишите следующие процедуры:
Процедура CommandButton1_Click – тут происходит обработка клика по кнопке. После клика, произойдет считывание выбранных данных для каждого объекта ComboBox vba excel, далее, все четыре значения объединяются и записываются в содержимое свойства Caption объекта Надпись.
Процедура UserForm_Initialize – тут происходит заполнение списков содержимым колонок сразу после инициализации формы. Происходит выбор заданной колонки листа Excel, потом циклично идет перебор всех ее значений и их добавление (метод AddItem) в выбранный список.
VBA ComboBox Word
Тут мы создадим список, состоящий из трех колонок, как он выглядит, можно посмотреть на рисунке. Не буду вникать во все премудрости, а сразу покажу код:
Как видим, при инициализации мы сначала заполняем свойства объекта ComboBox1 в блоке with … wend: три колонки, равной длины, заголовки отсутствуют. Далее происходит ручное заполнение списка. Как видим, элемент первой колонки добавляется с помощью метода AddItem, остальные колонки заполняются как массивы с помощью метода List.
Спасибо за внимание. Автор блога Владимир Баталий