Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Макросы.doc
Скачиваний:
28
Добавлен:
21.11.2018
Размер:
16.91 Mб
Скачать

Инициализация значений экранной формы

Вы должны заранее подумать о том, что произойдет при загрузке экранной формы. Например, желательно поместить текущую дату в поле ввода Дата - пользователи будут весьма благодарны за то, что отпадет необходимость вводить дату. Чтобы сделать это и все остальное, что должно выполняться при открытии формы, нужно создать процедуру загрузки формы (назовем ее ЗагрузкаФормы). В этой процедуре должен быть код, задающий значения для элементов управления формы.

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

  1. Перейдите в текущую рабочую книгу. Переименуйте рабочий лист Лист2 на Списки.

  2. На рабочем листе Списки перейдите в ячейку А1 и введите заголовок Типы расходов.

  3. Начиная с ячейки В2, введите следующие значения:

в ячейку В2: Пляжный зонтик,

в ячейку B3: Аренда велосипеда,

в ячейку В4: Уроки гольфа,

в ячейку В5: Гольф, 18 лунок,

в ячейку В6: Гольф, 9 лунок,

в ячейку В7: Полотенце для бассейна,

в ячейку В8: Теннисный корт,

в ячейку В9: Уроки тенниса.

  1. Выделите диапазон В2:В9 и задайте ему имя Расходы.

Чтобы задать имя диапазону ячеек, выделите этот диапазон и в поле Имя (с левой стороны в строке формул) введите имя диапазона. Нажмите клавишу <Enter>.

  1. Перейдите в ячейку Е1 и введите заголовок Типы кредитных карт.

  2. Начиная с ячейки F2, введите следующие значения:

в ячейку F2: Mastercard,

в ячейку F2: Visa,

в ячейку F2: American Express,

в ячейку F2: Diner's Club.

  1. Выделите диапазон F2:F5 и задайте ему имя ТипыКарт.

  2. Сохраните рабочую книгу.

  3. Нажмите <Alt+F11> для возврата в редактор Visual Basic.

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

  1. Дважды щелкните на экранной форме (не на элементах управления, а именно на форме). Откроется окно кода с заголовком процедуры UserForm_Click (Щелчок на экранной форме) (рис. 15.1).

  2. Нам пока не нужна процедура UserForm_Click, которая вызывается на исполнение после щелчка на экранной форме. Нам нужна процедура, выполняющаяся при открытии формы. На языке программистов такая процедура называется процедурой, обрабатывающей событие Activate (Активизация). Чтобы создать эту процедуру, щелкните на кнопке со стрелкой, направленной вниз, в правой части раскрывающегося списка возможных событий (рис. 15.1). В этом списке выберите событие Activate. В окне кода появится заголовок процедуры UserForm_Activate.

  3. Введите код процедуры UserForm_Activate.

With lstExpenseType

 .RowSource = "Расходы"

 .ListIndex =0

End With

txtDate.Text = Format(Now, "dd/mm/yy")

With lstCardType

 .RowSource = "ТипыКарт"

 .ListIndex = 0

End With

Рис. 15.1. Окно кода для создания и редактирования процедур, управляющих экранной формой

  1. Нажмите клавишу <F5> для выполнения процедуры. Отобразится экранная форма с заполненными списками Типы расходов и Типы карт, а также заполненным полем Дата (рис. 15.2).

  2. Закройте форму и вернитесь в редактор Visual Basic.

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

Рис. 15.2. Автоматическое заполнение списков и полей формы при ее открытии Полный код процедуры UserForm_Activate приведен в листинге 15.1.

Листинг 15.1. Процедура UserForm Activate

1: Private Sub UserForm_Activate()

2:  With lstExpenseType

3:   .RowSource = "Расходы"

4:   .ListIndex =0

5:  End With

6:

7:  txtDate.Text = Format(Now, "dd/mm/yy")

8:

9:  With lstCardType

10:   .RowSource = "ТипыКарт"

11:   .ListIndex = 0

12:  End With

13: End Sub

Для задания значений списков используются одинаковые группы операторов. Так, для списка Типы расходов значения задаются следующими операторами:

With lstExpenseType

 .RowSource = "Расходы"

 .ListIndex = 0

End With

Свойство RowSource ссылается на имя диапазона, где хранятся значения элементов списка. (Очевидно преимущество использования имени диапазона по сравнению с адресом диапазона - меньше вероятность неправильно ввести ссылку, возможность в дальнейшем переопределить диапазон без изменения кода процедуры, лучшая читаемость кода.) Свойство ListIndex определяет, какой элемент списка будет отображаться при открытии формы - все элементы списка пронумерованы, начиная с нуля.

По-иному задается значение для поля Дата:

txtDate.Text = Format(Now, "dd/mm/yy")

Функция Now возвращает текущую дату, функция Format форматирует текущую дату в соответствии с форматом dd/mm/yy (день месяца, порядковый номер месяца, две цифры года).