Microsoft Excel

трюкиприёмырешения

Как средствами VBA использовать полосу прокрутки

Продолжим рассмотрите элементов управления, и следующий элемент, который мы разберем, — «Полоса прокрутки». Сразу перейдем к разработке интерфейса очередного примера. Откроем новую книгу и на листе расположим две полосы прокрутки и два текстовых окна (рис. 1.40). Левая полоса прокрутки вместе с левым текстовым окном предназначена для отображения показателей работы одного из менеджеров (для определенности — Петрова), а аналогичные правые элементы — для отображения показателей работы другого (Сидорова). Передвижением ползунка левой либо правой полосы прокрутки руководитель может установить показатель работы менеджера. Это будет числовое значение от 0 до 100. Одновременно с этим текстовое окно по вертикали займет соответствующее положение.

Рис. 1.40. Пример использования полосы прокрутки

Рис. 1.40. Пример использования полосы прокрутки

Для левого текстового окна выберем Petrov в качестве значения свойства Name, а у левой полосы прокрутки для аналогичного свойства установим значение Scroll Petrov. Соответственно, у правого текстового окна свойство Name Sidorov, а у правой полосы прокрутки Name — ScrollSidorov.

У полосы прокрутки часто используются следующие свойства:

  • Value — значение, соответствующее положению движка (ползунка) на полосе прокрутки;
  • Мах — значение, соответствующее нижнему (или право му при горизонтальной полосе прокрутки) положению движка;
  • Min — значение, соответствующее верхнему (или левому при горизонтальной полосе прокрутки) положению движка;
  • SmallChange — значение, соответствующее изменению значения Value при щелчках на стрелке полосы прокрутки;
  • LargeChange — значение, соответствующее изменению значения Value при щелчках на полосе прокрутки.

У текстового окна (как у любого другого элемента) есть свойство Тор, которое определяет положение элемента по вертикали, начиная от верхнего края листа. А при изменении положения движка левой полосы прокрутки автоматически выполняется процедура ScrollPetrov_Change(), для правой полосы, соответственно, ScrollSidorov_Change().

Теперь более точно сформулируем задачу для программной разработки. Будем считать, что у нас в подчинении работают два менеджера и необходимо ежедневно сопоставлять результаты их работы. Скажем, количественная оценка каждого сотрудника изменяется в интервале от 0 до 100 баллов. Технически для отражения результата работы менеджера руководителю необходимо передвинуть движок соответствующей линейки прокрутки. В этом случае текстовое окно должно синхронно перемещаться на листе по вертикали, а в самом окне отображаться количество баллов. При этом, когда движок в верхнем положении, текстовое окно должно располагаться на уровне верхней границы полосы прокрутки. Соответственно, при нижнем положении движка текстовое окно должно располагаться на уровне нижней границы полосы прокрутки. Для реализации этого в окне свойств для полос прокрутки установим значения Min, равные 0, а значения Мах и Height равными 100. Установим также для этих элементов: SmallChange = 1 и LargeChange = 5. Теперь можно написать процедуры, которые выполняются при передвижении движков левой (листинг 1.23) и правой (листинг 1.24) полос прокрутки.

1
2
3
4
5
6
7
8
' Листинг 1.23. Процедура, выполняемая при перемещении движка левой линейки
Private Sub ScrollPetrov_Change()
Petrov.Top = ScrollPetrov.Value + ScrollPetrov.Top
Petrov.Text = "Петров " + CStr(ScrollPetrov.Value)
Inten = 155 + ScrollPetrov.Value - ScrollPetrov.Min
Petrov.ForeColor = RGB(Inten, Inten, Inten)
Petrov.BackColor = RGB(0, Inten, 0)
End Sub
1
2
3
4
5
6
7
8
' Листинг 1.24. Процедура, выполняемая при перемещении движка правой линейки
Private Sub ScrollSidorov_Change()
Sidorov.Top = ScrollSidorov.Value + ScrollSidorov.Top
Sidorov.Text = "Сидоров " + CStr(ScrollSidorov.Value)
Inten = 155 + ScrollSidorov.Value - ScrollSidorov.Min
Sidorov.ForeColor = RGB(Inten, Inten, Inten)
Sidorov.BackColor = RGB(inten, 0, 0)
End Sub

Перед тем как прокомментировать работу программы, полезно еще раз посмотреть на результат ее работы (см. рис. 1.40). Кроме синхронного с движками полос прокрутки перемещения текстового окна по вертикали, изменяется сообщение в этом окне и меняются цвета фона и основного текста. Так, при верхнем положении движка цвет букв и фона более бледный, а при перемещении движка вниз цвета становятся более яркими. Поясним теперь некоторые конструкции этих процедур. Пояснения сделаем по тексту, представленному в листинге 1.23. В строке Petrov.Тор = ScrollPetrov.Value + ScrollPetrov.Top производится изменение положения текстового окна в соответствии с положением движка. Фактически это приводит к перемещению текстового окна по вертикали. В следующей строке используется функция CStr для преобразования данных из числового типа в строковый. В результате в текстовое окно выводится сообщение о текущем положении движка на полосе прокрутки.

После этого в следующих трех строках производится изменение фонового и основного цветов текстового окна. Как уже ранее отмечалось, интенсивность цвета меняется от 0 до 255. В результате выполнения этих строк максимальная интенсивность зеленого цвета для фона обеспечивается при нижнем крайнем положении движка. Для основного цвета интенсивность также будет максимальной. При другом крайнем положении движка интенсивности устанавливаются равными 155. Зеленый фон в этом случае станет более бледным, а цвет букв серым.

Top