Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
формы.doc
Скачиваний:
6
Добавлен:
02.06.2015
Размер:
532.48 Кб
Скачать

Конструирование формы для выбора рабочего листа

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

Рис. 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

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