Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание пользовательских п ÒÉÌÏÖÅÎÉÊ ÓÒÅÄÓÔÁÍ...doc
Скачиваний:
6
Добавлен:
18.11.2019
Размер:
2.02 Mб
Скачать

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

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

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

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

Рис. 7.12. Форма для выбора рабочего листа в режиме конструктора

Свойства элементов формы 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 активизирует лист, имя которого выделено из списка.

Событийные процедуры для действий со списком содержат оператор вызова общей процедуры 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)

‘нажатие клавиши Enter

If KeyCode = vbKeyReturn Then ActivateSelectedSheet

End Sub

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