Excel полоса прокрутки макрос
Определяет, содержит ли элемент управления, форма или страница вертикальные полосы прокрутки, горизонтальные полосы прокрутки или оба вида полос.
Синтаксис
объект. ScrollBars [= fmScrollBars ]
Синтаксис свойства ScrollBars состоит из следующих частей:
Part | Описание |
---|---|
object | Обязательно. Допустимый объект. |
fmScrollBars | Необязательный элемент. Место отображения полос прокрутки. |
Settings
Параметры для fmScrollBars :
Константа | Значение | Описание |
---|---|---|
fmScrollBarsNone | 0 | Полосы прокрутки не отображаются (по умолчанию). |
fmScrollBarsHorizontal | 1 | Отображается горизонтальная полоса прокрутки. |
fmScrollBarsVertical | 2 | Отображается вертикальная полоса прокрутки. |
fmScrollBarsBoth | 3 | Отображаются и горизонтальная, и вертикальная полосы прокрутки. |
Примечания
Если значение свойства KeepScrollBarsVisible равно True, любая полоса прокрутки всегда видна на форме или странице, независимо от того, попадает ли содержание объекта в границы объекта.
Если полоса прокрутки видна, ее поле прокрутки ограничивается видимой областью полосы прокрутки. При необходимости также изменяется положение прокрутки, чтобы вся полоса прокрутки оставалась видимой. Диапазон полосы прокрутки меняется при изменении значения свойства ScrollBars, меняется размер прокручиваемой или видимой области.
Если не видна планка прокрутки, можно установить ее положение прокрутки до любого значения. Допустимы как отрицательные значения, так и значения, превышающие размер прокрутки.
Для однострочного элемента управления можно отобразить горизонтальную полосу прокрутки, используя свойства ScrollBars и AutoSize. Полосы прокрутки скрываются или отображаются в соответствии со следующими правилами:
Если для свойства ScrollBars задано значение fmScrollBarsNone, полоса прокрутки не отображается.
Если для свойства ScrollBars задано значение fmScrollBarsHorizontal или fmScrollBarsBoth, для элемента управления отображается горизонтальная полоса прокрутки, если текст длиннее области редактирования и если элемент управления содержит достаточно места, чтобы разместить полосу прокрутки под его областью редактирования.
Если для свойства AutoSize задано значение True, элемент управления увеличивается, чтобы вместить добавленную полосу прокрутки, если размер элемента управления максимален или близок к максимальному.
Для многоуровневой textBox можно отобразить панели прокрутки с помощью свойств ScrollBars, WordWrap и AutoSize . Полосы прокрутки скрываются или отображаются в соответствии со следующими правилами:
Если для свойства ScrollBars задано значение fmScrollBarsNone, полоса прокрутки не отображается.
Если для свойства ScrollBars задано значение fmScrollBarsVertical или fmScrollBarsBoth, для элемента управления отображается вертикальная полоса прокрутки, если текст длиннее области редактирования и если элемент управления содержит достаточно места, чтобы разместить полосу прокрутки вдоль правого края его области редактирования.
Если для свойства WordWrap задано значение True, горизонтальная полоса прокрутки для многострочного элемента управления не показывается. Большинство элементов управления несколькими линиями не используют горизонтальную полосу прокрутки.
Горизонтальная полоса прокрутки может отображаться в многострочном элементе управления в случае одновременного выполнения следующих условий:
- Область редактирования содержит слово, оказывающееся длиннее ширины области редактирования.
- Для элемента управление включено использование горизонтальных полос прокрутки.
- В элементе управления достаточно места для размещения полосы прокрутки под областью редактирования.
- Для свойства WordWrap задано значение False.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
UserForm.ScrollBar – это элемент управления пользовательской формы, представляющий из себя полосу прокрутки с кнопками, реагирующий как на перемещение ползунка, так и на нажатие кнопок.
Элемент управления ScrollBar предназначен в VBA Excel для ввода пользователем числовых данных, которые ограничены минимальным и максимальным значениями. Увеличение или уменьшение значения полосы прокрутки осуществляется с указанным шагом при помощи ползунка или кнопок.
Визуально, элемент управления ScrollBar состоит из полосы прокрутки и двух кнопок, работающих аналогично кнопкам элемента управления SpinButton. Ориентация может быть горизонтальной или вертикальной в зависимости от настроек.
Полоса прокрутки в VBA Excel используется в паре с элементом управления TextBox или Label. Вспомогательный элемент необходим, чтобы отобразить текущее значение ScrollBar на пользовательской форме.
Свойства элемента ScrollBar
Свойство | Описание |
---|---|
BackColor | Цветовое оформление элемента управления. |
Delay* | Время между последовательными событиями при удержании кнопки. |
ControlTipText | Текст всплывающей подсказки при наведении курсора на полосу прокрутки. |
Enabled | Возможность взаимодействия пользователя с элементом управления. True – взаимодействие включено, False – отключено (цвет стрелок становится серым). |
Height | Высота элемента управления. |
Left | Расстояние от левого края внутренней границы пользовательской формы до левого края элемента управления. |
Max | Максимальное значение свойства Value. |
Min | Минимальное значение свойства Value. |
Orientation** | Задает горизонтальную или вертикальную ориентацию элемента управления ScrollBar. |
SmallChange | Шаг изменения значения свойства Value. |
TabIndex | Определяет позицию элемента управления в очереди на получение фокуса при табуляции, вызываемой нажатием клавиш «Tab», «Enter». Отсчет начинается с 0. |
Top | Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края элемента управления. |
Visible | Видимость элемента ScrollBar. True – элемент отображается на пользовательской форме, False – скрыт. |
Width | Ширина элемента управления. |
* По умолчанию свойство Delay равно 50 миллисекундам. Это означает, что первое событие (SpinUp, SpinDown, Change) происходит через 250 миллисекунд после нажатия кнопки, а каждое последующее событие – через каждые 50 миллисекунд (и так до отпускания кнопки).
** По умолчанию включена автоматическая ориентация, которая зависит от соотношения между шириной и высотой элемента управления. Если ширина больше высоты – ориентация горизонтальная, если высота больше ширины – ориентация вертикальная.
В таблице перечислены только основные, часто используемые свойства полосы прокрутки. Все доступные свойства отображены в окне Properties элемента управления ScrollBar.
Иногда клиента не переубедишь. Думаю, это даже хорошо — ведь только клиент знает, что ему на самом деле нужно, а предоставляющий услугу должен стремиться сделать именно как просят. На этот раз мне заказали сделать, чтобы ячейки в матрице выбирались при помощи полосы прокрутки, горизонтальной и вертикальной. Основная причина — закрыть доступ к самой матрице и оставить возможность двигать только полосы прокрутки. Сделал именно так. А вам я расскажу, что такое полоса прокрутки в Excel, и как ее добавить на лист.
Сперва я напишу, как правильно и быстро добавить полосу прокрутки на лист, затем опишу, как настроить полосы,привязать их к коду VBA и защитить лист.
Полоса прокрутки в Excel. Начало
Добавить полосу прокрутки несложно: перейдите на вкладку разработчик (как включить вкладку, читайте здесь ). Найдите кнопку Вставить и выберите Элемент управления формы — Полоса прокрутки. Как показано на картинке:
Можно выбрать и элементы ActiveX (ниже), но на мой взгляд настройка Элемента управления формы для новичка удобнее. Поэтому рассказываю именно о них.
Полоса прокрутки в Excel, как элемент управления формы. Настройка
Итак, вы добавили полосу. Теперь привяжем ее к данным, сделать это несложно. Кликаете правой кнопкой мыши и выбираете формат объекта
Размер вы можете изменять, перетаскивая границы, поэтому в открывшемся окне нам наиболее интересна вкладка Элемент управления
Задаем мин и макс значения (у нас полоса на месяцы, поэтом от одного до 12), задаем шаг изменения по одному месяцу
Двигая ползунок полосы прокрутки, вы передаете число значения ползунка в определенную ячейку.
Это число передается в ячейку, которую вы указываете в поле Связь с ячейкой. В нашем случае A2.
Добавим в полосу прокрутки немного макросов
Теперь, чтобы в таблице выбиралась определенная ячейка, добавим немного кода. Откройте редактор VBA (что это такое читайте в статье ).
На странице листа запишите код
Этот макрос будет выполняться при изменении полосы прокрутки ScrollBar8 методом Change. У меня элементов было много и форма управления восьмая. Узнать номер вашей полосы прокрутки можно в окне, предварительно выделив полосу.
В Cells мы определяем значения нашей матрицы сначала по строкам, потом по столбцам. В ячейку B2 записываем статичное значение или передаем с горизонтальной полосы прокрутки. Вторую полосу создаем по аналогии.
Как защитить лист, но дать возможность работать с полосой прокрутки (элементом управления форм)
Заходите во вкладку Рецензирование и найдите кнопку Защитить лист . Жмете ОК. Но элементы управления форм тоже не работают во время защиты, — скажете вы. Верно. Я видел громоздкие коды, которые решали эту проблему. Но есть решение простое и удобное. Разрешите изменять ячейки, в которые полосы передают данные (A1 и B2), тогда и полосы будут работать при защищенном листе.
Чтобы разрешить изменение ячеек, кликните по ячейке правой кнопкой мыши — Формат ячеек — вкладка Защита — снимите галочку Защищаемая ячейка
Продолжим рассмотрите элементов управления, и следующий элемент, который мы разберем, — «Полоса прокрутки». Сразу перейдем к разработке интерфейса очередного примера. Откроем новую книгу и на листе расположим две полосы прокрутки и два текстовых окна (рис. 1.40). Левая полоса прокрутки вместе с левым текстовым окном предназначена для отображения показателей работы одного из менеджеров (для определенности — Петрова), а аналогичные правые элементы — для отображения показателей работы другого (Сидорова). Передвижением ползунка левой либо правой полосы прокрутки руководитель может установить показатель работы менеджера. Это будет числовое значение от 0 до 100. Одновременно с этим текстовое окно по вертикали займет соответствующее положение.
Рис. 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.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.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
После этого в следующих трех строках производится изменение фонового и основного цветов текстового окна. Как уже ранее отмечалось, интенсивность цвета меняется от 0 до 255. В результате выполнения этих строк максимальная интенсивность зеленого цвета для фона обеспечивается при нижнем крайнем положении движка. Для основного цвета интенсивность также будет максимальной. При другом крайнем положении движка интенсивности устанавливаются равными 155. Зеленый фон в этом случае станет более бледным, а цвет букв серым.
Элемент Полоса прокрутки позволяет изменять значения в определенном диапазоне с шагом (1, 2, 3, . ), если нажимать на кнопки со стрелочками, и с увеличенным шагом, если нажимать на саму полосу в стороне от бегунка. Этот элемент имеет много общего со Счетчиком .
Для вставки элементов управления на лист необходимо отобразить вкладку Разработчик.
Теперь вставить элемент управления можно через меню: Разработчик/ Элементы управления/ Вставить .
Обратите внимание, что в этом меню можно также вставить Элементы ActiveX, которые расположены ниже интересующих нас Элементов управления формы. У обоих типов есть одни и те же элементы Кнопка, Список, Флажок и т.п. Разница между ними следующая: чтобы использовать Элементы ActiveX необходимо использовать VBA, а Элементы управления формы можно напрямую привязать к ячейке на листе.
Полоса прокрутки ( Scroll Bar ) как, впрочем и все другие Элементы управления формы, возвращает только 1 числовое значение. См. файл примера .
Обзорную статью обо всех элементах управления формы можно прочитать здесь .
Вставка Полосы прокрутки
Через меню Разработчик/ Элементы управления/ Вставить выберем левой клавишей мыши элемент Полоса прокрутки .
После этого выпадающее меню закроется, а курсор вместо обычного толстого крестика
превратится в тонкий крестик.
Кликнув левой клавишей мыши в нужное место на листе, элемент Полоса прокрутки будет помещен на лист (вертикально).
Чтобы при вставке элемента поместить Полосу прокрутки горизонтально, кликните и удерживайте левую клавишу мыши, затем переместите мышь вправо и чуть вниз.
Выделение Полосы прокрутки
После вставки Полосы прокрутки она становится выделенной. Если кликнуть в любом другом месте листа, то Полоса прокрутки перестанет быть выделенной. Чтобы снова ее выделить нужно кликнуть ее ПРАВОЙ клавишей мыши (клик ЛЕВОЙ клавиши увеличивает или уменьшает значение в связанной ячейке (см. ниже)). После клика правой кнопкой также появляется контекстное меню, чтобы его убрать можно нажать ESC или кликнуть левой клавишей по Полосе прокрутки .
Перемещение Полосы прокрутки и изменение ее размеров
Если навести курсор на выделенную Полосу прокрутки (курсор примет форму 4-х направленных в разные стороны стрелок), затем нажать и удерживать левую кнопку мыши, то можно переместить Полосу прокрутки . Удерживая клавишу ALT можно выровнять Полосу прокрутки по границам ячеек. Выделенную Полосу прокрутки также можно перемещать стрелками с клавиатуры.
Если навести курсор на углы прямоугольника или на маленькие квадратики на границе, то можно изменить ее размер.
Связываем Полосу прокрутки с ячейкой
Как было сказано выше, все Элементы управления формы возвращают значение. Это значение помещается в ячейку определенную пользователем. Чтобы связать Элемент управления с ячейкой, кликните на него ПРАВОЙ клавишей мыши, в появившемся контекстном меню выберите Формат объекта. Появится диалоговое окно, выберите вкладку Элемент управления (если такая вкладка отсутствует, то Вы вставили Элемент ActiveX, а не Элемент управления формы, об этом см. выше).
В поле Связь с ячейкой нужно ввести ссылку на ячейку. Свяжем наш Полосу прокрутки с ячейкой А1 .
Также установим минимальное значение =1, максимальное =101, шаг изменения =2, шаг изменения по страницам =10.
Убедитесь, что Полоса прокрутки не выделена. Пощелкайте левой клавишей мыши по кнопкам Полосы прокрутки . В ячейке А1 значение будет увеличиваться/ уменьшаться в указанном диапазоне, причем с шагом 2 (1, 3, 5, . ), т.е. в ячейку будут вводиться только нечетные числа. При щелчке по полосе прокрутки, значения будут уменьшаться/ увеличиваться с шагом 10.
Существует и другой способ связать Элемент управления и ячейку: Выделите правой клавишей мыши Элемент управления, в Строке формул введите =, затем кликните левой клавишей мыши на нужную ячейку, нажмите клавишу ENTER . Чтобы изменить ячейку, с которой связан Элемент управления, достаточно перетащить эту ячейку, взяв за ее границу, в нужное место.
Одну ячейку можно связать с несколькими элементами управления, но имеет ли это смысл? Решать Вам.
Примечание . Можно принудительно ввести в ячейку текстовое значение, но оно будет заменено при следующем нажатии Полосы прокрутки . Проведем эксперимент. Пусть в ячейке А1 введено число 5. Даже если Вы введете в ячейку А1 текст " строка ", то при следующем нажатии Полосы прокрутки , в ячейке появится число 7 (если шаг =2), т.е. Полоса прокрутки хранит текущее значение не в ячейке, а где-то в себе.
Если, в нашем примере, Вы введете четное значение, то Полоса прокрутки не сбросит его, а будет прибавлять 2 и Вы получите четную последовательность 2, 4, 6, . Но, при достижении верхней границы его поведение изменится 96, 98, 100, 101, т.к. максимальное значение установлено нами =101. Теперь при движении вниз Полоса прокрутки будет воспроизводить последовательность нечетных чисел! Тоже справедливо и для нижней границы: 6, 4, 2, 1, т.к. минимальное значение установлено =1. Поэтому, следите, чтобы граничные значения (при шаге отличным от 1), содержались в требуемой последовательности, иначе при движении вверх и вниз Вы можете получить разные последовательности. Например, для последовательности 1, 4, 7, 10 (шаг 3) правильно установить границы 1 и 10. Если Вы установите границы 1 и 9, то при движении от 1 Вы получите последовательность 1, 4, 7, 9, затем при движении от 9 - получите 9, 6, 3, 1, т.е. 2 разные последовательности!
Использование Полосы прокрутки
Полоса прокрутки удобна, когда у Вас есть модель, которая зависит от определенного параметра и Вам требуется посмотреть, как ведут себя показатели модели в зависимости от этого параметра: согласитесь нажимать на кнопку удобней, чем вводить значения непосредственно в ячейку. Можно также нажать на Полосу прокрутки и удерживать левую клавишу мыши, и значения в связанной ячейке начнут "бежать".
Предположим, что имеется таблица с множеством столбцов и нам нужно средство для просмотра только одного столбца.
При нажатии на Полосу прокрутки (кнопки), значение в связанной ячейке А1 будет увеличиваться/ уменьшаться на 1 (шаг), следовательно, будет отображен следующий/ предыдущий месяц. При нажатии на Полосу прокрутки (полоса), значение в связанной ячейке А1 будет увеличиваться/ уменьшаться на 3 (шаг страницы), следовательно, будет отображен месяц, отстоящий на 3 месяца вперед или назад. Это реализовано с помощью формулы =СМЕЩ($B19;;$A$1-1) в ячейке В8 и ниже.
Также для выделения текущего месяца в исходной таблице использовано Условное форматирование .
Нажмем на кнопку Полосы прокрутки , чтобы отобразить (в диапазоне В8:В14 ) следующий месяц.
Этот месяц будет выделен в исходной таблице.
Примечание . Таблица, конечно же, спроектирована не совсем корректно: логично разместить материалы в столбцах, а месяцы в строках. О правильном проектировании таблиц читайте здесь .
Имя Элемента управления
У каждого Элемента управления есть имя. Чтобы его узнать нужно выделить Полосу прокрутки , в Поле имя будет отображено ее имя. Чтобы изменить имя Полосы прокрутки - в Поле имя введите новое имя и нажмите клавишу ENTER . Также имя можно изменить в Области выделения ( Главная / Редактирование/ Найти и выделить/ Область выделения ).
Зачем нам знать имя элемента управления? Если Вы не планируете управлять Полосой прокрутки из программы VBA, то имя может потребоваться только для настройки его отображения на листе. Об этом читайте ниже.
Прячем Полосу прокрутки на листе
Включите Область выделения ( Главная / Редактирование/ Найти и выделить )
В Области выделения можно управлять отображением не только Элементов управления, но и других объектов на листе, например рисунков.
Нажмите на изображение глаза напротив имени объекта и объект исчезнет/ появится.
Расширяем возможности Полосы прокрутки
Диапазон изменения значений Полосы прокрутки может содержать только положительные значения, шаг - только целые и положительные значения. Этого не всегда достаточно. Научимся использовать формулы, чтобы расширить возможности Полосы прокрутки (см. файл примера ).
Чтобы иметь возможность изменять значение в ячейке с шагом 0,1 используйте формулу =A31/10 ( Полоса прокрутки связана с ячейкой А31 ).
Чтобы изменять значение в ячейке от -24 до -1, используйте формулу =-25+A35 (границы Полосы прокрутки установлены от 1 до 24, Полоса прокрутки связана с ячейкой А35 )
Шаг изменения Полосы прокрутки можно сделать переменным, например, используя квадратичную зависимость (1, 4, 9, 16, . ) с помощью формулы =A38*A38 ( Полоса прокрутки связана с ячейкой А38 ).
Читайте также: