- •Пользовательские формы
- •Режимы работы с формой
- •Режим конструктора
- •Элементы управления
- •Событийные процедуры
- •Объекты UserFormиControls
- •Режим выполнения
- •Разработка приложения
- •Пример 1
- •Конструирование основной формы
- •Свойства формы и элементов управления
- •Создание событийных процедур
- •Конструирование формы для выбора рабочего листа
- •Создание событийных процедур
- •Элемент ListBox
- •Событийная процедура инициализации формы
- •Завершение разработки приложения
- •Связь формы с рабочей книгой
- •Элемент TextBox
- •Элемент ListBox
- •Пример 2
- •Конструирование форм
- •Процедуры
Конструирование формы для выбора рабочего листа
Создадим вторую форму, которая представит на экране список рабочих листов активной рабочей книги. Из списка листов пользователь выберет рабочий лист, в ячейках которого и сохранятся слова введенного текста.
Рис. 7.9. Форма для выбора рабочего листа в режиме конструктора
Перечень имен рабочих листов будет высвечиваться в форме с использованием элемента ListBox. Этот элемент представляет список значений, из которого во время выполнения формы пользователь может выбрать некоторое значение.
Свойства элементов формы Act_Sheet
Тип элемента |
Комментарий |
Свойства |
Значение свойства |
UserForm |
Форма |
Name |
Act_Sheet |
Caption |
ActivateSheet | ||
Label |
Поле сообщения |
Name |
Mess |
Caption |
Select Worksheet | ||
ListBox |
Список рабочих листов |
Name |
Lst_sheet |
TabIndex |
0 | ||
CommandButton |
Кнопка, нажатие на которую активизирует выбранный лист и записывает слова в ячейки листа |
Name |
cmd_Act |
Caption |
Activate | ||
Accelerator |
S | ||
TabIndex |
1 | ||
CommandButton |
Кнопка завершения работы с формой |
Name |
cmd_Can |
Caption |
Cancel | ||
Accelerator |
C | ||
TabIndex |
2 |
Создание событийных процедур
Для кнопки cmd_Can событийная процедура выглядит так:
Private Sub cmd_Can _Click() Unload Me End Sub
|
При нажатии на кнопку Cancel форма ActivateSheet выгружается из памяти. |
Элемент ListBox
При выборе рабочего листа из списка возможны три ситуации:
пользователь выберет название листа одинарным щелчком мыши и нажмет кнопку Activate;
пользователь выберет название листа двойным щелчком мыши;
пользователь выберет название листа одинарным щелчком мыши и нажмет клавишу Enter;
пользователь не выберет никакого листа и в этом случае запись слов производиться не будет.
Поэтому предусмотрим общую процедуру ActivateSelectedSheet для активизации листа в различных ситуациях. Все разрабатываемые событийные процедуры будут вызывать эту процедуру для активизации выбранного листа.
Private Sub ActivateSelectedSheet() If lst_Sheet.ListIndex > -1 Then Worksheets(lst_Sheet.List(lst_Sheet.ListIndex)).Activate End If Unload Me End Sub
|
Если выделен некоторый рабочий лист из списка листов, то он активизируется и форма выгружается. Если не выделено никакого листа, то форма выгружается без активизации листа. |
Процедура ActivateSelectedSheet демонстрирует несколько свойств и методов элемента ListBox.
Свойство ListIndexвозвращает индекс выделенной строки из списка. Индекс начинается с нуля. Значение -1 говорит о том, что не выделено ни одной строки в списке.
Свойство Listпозволяет получит доступ к значениям списка как к элементам двумерного массива, первое измерение которого строки списка, второе измерение столбцы списка. В нашем случае список содержит только один столбец. Строки списка – это названия листов рабочей книги.
Оператор lst_Sheet.List(i) возвращает i-ую строку из списка и, следовательно, оператор lst_Sheet.List(lst_Sheet.ListIndex) возвращает выделенную строку из списка. Индекс столбца массива List указывать необязательно, если массив имеет только один столбец.
Метод Activateактивизирует объект
Оператор Sheets(lst_Sheet.List(lst_Sheets.ListIndex)).Activate активизирует лист, имя которого выделено из списка.
Событийные процедуры одинарного или двойного щелчка на строку списка и процедура нажатия на клавишу Enter содержат оператор вызова общей процедуры ActivateSelectedSheet и выглядят следующим образом:
Private Sub cmd_act_Click() ActivateSelectedSheet End Sub
Private Sub lst_Sheet_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ActivateSelectedSheet End Sub |
Private Sub lst_Sheet_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyReturn Then ActivateSelectedSheet End Sub
|
Прежде, чем выбирать имя листа из списка, этот список надо создать. Это должно быть сделано автоматически перед высвечиванием формы.