Полоса прокрутки vba excel

Элемент управления пользовательской формы ScrollBar, применяемый в VBA Excel для создания полосы прокрутки. Свойства UserForm.ScrollBar, примеры кода.

UserForm.ScrollBar – это элемент управления пользовательской формы, представляющий из себя полосу прокрутки с кнопками, реагирующий как на перемещение ползунка, так и на нажатие кнопок.

Элемент управления 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.

Примеры кода с полосой прокрутки

Пример 1

Условие примера 1

  1. На пользовательской форме VBA Excel расположены элементы управления ScrollBar1 и Label1.
  2. Необходимо задать для полосы прокрутки ScrollBar1 интервал значений от -100 до 100 единиц с шагом 5 и отображением текущего значения на элементе Label1.
  3. При открытии формы полоса прокрутки должна быть установлена на значении 0.

Решение примера 1

Первоначальные настройки при открытии пользовательской формы:

Private Sub UserForm_Initialize()

Me.Caption = «Пример 1»

  With ScrollBar1

    .Min = 100

    .Max = 100

    .SmallChange = 5

    .Value = 0

  End With

Label1.Caption = «0»

End Sub

Обработка события Change объекта ScrollBar1:

Private Sub ScrollBar1_Change()

  Label1.Caption = ScrollBar1.Value

End Sub

Обе процедуры размещаются в модуле пользовательской формы VBA Excel.

Пример 2

Условие примера 2

  1. На пользовательской форме расположены элементы управления ScrollBar1 и TextBox1.
  2. Интервал значений для полосы прокрутки ScrollBar1 от 0 до 1000 единиц с шагом 10 и отображение текущего значения в поле элемента TextBox1.
  3. При открытии формы полоса прокрутки должна быть установлена в значение 0.
  4. Установка соответствующего значения полосы прокрутки при ручном изменении содержимого текстового поля.
  5. Предусмотреть сообщение о значении TextBox1, не входящем в интервал значений элемента управления ScrollBar1.

Решение примера 2

Первоначальные настройки при открытии пользовательской формы:

Private Sub UserForm_Initialize()

Me.Caption = «Пример 2»

  With ScrollBar1

    .Min = 0

    .Max = 1000

    .SmallChange = 10

    .Value = 0

  End With

TextBox1.Text = «0»

End Sub

Обработка события Change объекта ScrollBar1:

Private Sub ScrollBar1_Change()

  TextBox1.Text = ScrollBar1.Value

End Sub

Обработка события Change объекта TextBox1:

Private Sub TextBox1_Change()

On Error GoTo Instr

  ScrollBar1.Value = TextBox1.Text

Exit Sub

Instr:

  TextBox1.Text = «Недопустимое значение»

End Sub

Если содержимое элемента управления TextBox1 не соответствует интервалу значений полосы прокрутки, возникает ошибка (преобразование в число происходит автоматически). Чтобы ее избежать и вывести сообщение о недопустимости значения, используется обработчик ошибок.

Все три процедуры размещаются в модуле пользовательской формы.

When recording a macro, Excel includes all the scroll bar movement in the code.  Normally, we delete this code, as we just don’t need it.  But occasionally, being able to control the scroll bars and their display properties is useful.

Display or Hide Scroll Bars

Scroll bars can be displayed or hidden.  It is an application level setting, so will be applied to all workbooks open within the application.

The code below shows how to hide or display the scroll bars for all workbooks open in the application.

'Display all Scroll Bars
Application.DisplayScrollBars = True
'Hide all Scroll Bars
Application.DisplayScrollBars = False

The below shows how to hide or display either the horizontal or vertical scroll bars for active workbook.

'Hide all the vertical or horizontal Scroll Bar
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False
'Display the vertical or horizontal Scroll Bar
ActiveWindow.DisplayHorizontalScrollBar = True
ActiveWindow.DisplayVerticalScrollBar = True

Fix the Scroll Area

Fixing the scroll area will prevent a user from scrolling into or selecting any of the cells outside of the specified range.  I use this with dashboards so that the user’s screen is always focused on the key information, even if they try to scroll it won’t let them.

'Set the scroll area to a specific range
ActiveSheet.ScrollArea = "A10:D20"
'Reset the scroll area
ActiveSheet.ScrollArea = ""

Scroll to specific location on the worksheet

The code below shows how to scroll to a specific row or column.  Change the ScrollRow and ScrollColumn values to meet your requirements.

'Scroll to a specific row and column
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 10

Scroll by a specific number of rows or columns

SmallScroll and LargeScroll can be used to scroll the window, using the active cell as a start point.  The good news is that even if the code tries to scroll the horizontal or vertical position to be less than Row 1 or Column A the code will not create an error.

'Scroll horizontally or vertically by a specific number of rows or columns
ActiveWindow.SmallScroll Up:=100
ActiveWindow.SmallScroll Down:=50
ActiveWindow.SmallScroll ToRight:=8
ActiveWindow.SmallScroll ToLeft:=8
'The SmallScroll method can be applied within a single line
ActiveWindow.SmallScroll Up:=20, ToRight:=10
'The SmallScroll method can be applied without referencing the direction.
'The arguments must be presented in the order show below
'ActiveWindow.SmallScroll ([Down], [Up], [ToRight], [ToLeft])
ActiveWindow.SmallScroll 20, , 30,
'LargeScroll also exists as a method.  LongScroll will scroll a page at a time,
'rather than individual row/column
ActiveWindow.LargeScroll Down:=2, ToLeft:=1

The values can be negative numbers.  Up:=-20 is equivalent to Down:=20.  The same is true for ToLeft and ToRight.


Headshot Round

About the author

Hey, I’m Mark, and I run Excel Off The Grid.

My parents tell me that at the age of 7 I declared I was going to become a qualified accountant. I was either psychic or had no imagination, as that is exactly what happened. However, it wasn’t until I was 35 that my journey really began.

In 2015, I started a new job, for which I was regularly working after 10pm. As a result, I rarely saw my children during the week. So, I started searching for the secrets to automating Excel. I discovered that by building a small number of simple tools, I could combine them together in different ways to automate nearly all my regular tasks. This meant I could work less hours (and I got pay raises!). Today, I teach these techniques to other professionals in our training program so they too can spend less time at work (and more time with their children and doing the things they love).


Do you need help adapting this post to your needs?

I’m guessing the examples in this post don’t exactly match your situation. We all use Excel differently, so it’s impossible to write a post that will meet everybody’s needs. By taking the time to understand the techniques and principles in this post (and elsewhere on this site), you should be able to adapt it to your needs.

But, if you’re still struggling you should:

  1. Read other blogs, or watch YouTube videos on the same topic. You will benefit much more by discovering your own solutions.
  2. Ask the ‘Excel Ninja’ in your office. It’s amazing what things other people know.
  3. Ask a question in a forum like Mr Excel, or the Microsoft Answers Community. Remember, the people on these forums are generally giving their time for free. So take care to craft your question, make sure it’s clear and concise.  List all the things you’ve tried, and provide screenshots, code segments and example workbooks.
  4. Use Excel Rescue, who are my consultancy partner. They help by providing solutions to smaller Excel problems.

What next?
Don’t go yet, there is plenty more to learn on Excel Off The Grid.  Check out the latest posts:

The VBA scrollbar to set the value in a cell

The Scrollbar is very useful to give the user the possibility to set
value in an interactive and graphical way. Here we explain how to use the
scrollbar or slider to set a cells value.

In the developer menu, select the scrollbar and place one on the screen
where you want it. You can make a vertical one or horizontal one.

VBA scroll bar or slider

Now right click on the bar and set its format. It will open a window
allowing various setting to be made like

Minimum and maximum value: sets the minimum and max
value the scroll bar can take.

Incremental range: the value that the bar will give you
will be multiple of this (for example 5, 10, 15, …).

Page change: it is the increment of the scroll bar when
you click in the scroll bar and not on the arrow.

Cell link: It is the cell that will display the value of
the scroll bar.

 VBA scroll bar or slider

Now you can see that when you move the scroll bar, the cell that you
linked it to, will change according to the value. Isn’t this so useful to
make a nice user interface looking like a NASA control panel :-)

VBA scroll bar or slider

If you copy and paste you scroll bar (by selecting it, pressing CTRL C
and then CTRL V) and then rearranging them, you will have 3 scroll bars like
here

VBA scroll bar or slider

You will see that by moving the one scroll bar, all 3 scroll bars will
move together. This is because you have to change the linked cell

VBA scroll bar or slider

Now we can do a funny trick is to set the color of one cell just by
moving the value of each scroll bar.

Now lets use the scroll bar to

In VBA the color of a cell is set by

Range(«cell»).Interior.Color = colorofcell

So by selecting our 3 values here we can create any colour existing in
the known universe. As you know colors are made of the 3 basics colors RED,
GREEN, BLUE. In short RGB. Every color has a value of 0 for dark to 255 to
super light (or white in that case)

And to get the final value of the colour you can use

value = RGB(Red, Green, Blue)

So by mixing both the RGB and the Cell color setting function we
get the following code.

Sub ScrollBar1_Change()

colorofcell = RGB(Range(«e5»).value,
Range(«e7»).value, Range(«e9»).value)

‘ this is how RGB
calculates the colorofcell = Range(«f17»).value + Range(«f20»).value *
256 + Range(«f23»).value * 256 * 256

Range(«d7»).Interior.Color =
colorofcell

End Sub

This is how you can use the scroll bar in a nice manner.

VBA scroll bar or slider

Please Tweet, Like or Share us if you enjoyed.

Элемент управления ScrollBar представляет из себя всем знакомую полосу прокрутки, которая встречается в текстовых полях, когда их содержимое не умещается на поверхности. Только в данном случае, его логика работы немного меняется.

VBA Объект ScrollBar удобно использовать, когда нужно увеличить или уменьшить диапазон. Так, можно с его помощью задавать диапазон для вычисления суммы чисел, или, в зависимости от положения ползунка менять цвет текста. Понятно, что в этом случае удобно использовать цикл for. Примером использования объекта ScrollBar VBA может служить регулятор громкости, контраста и так далее.

Базовые свойства класса ScrollBar VBA

Max  и  Min – данные свойства позволяют задать максимальное и минимальное значение, которые вы сможете определить используя данные элемент управления. Свойство принимает только целые значения в диапазоне от −32 767  до +32 767. Вы можете задавать значения как в прямом порядке (от меньшего к большего) так и в обратном (от большего к меньшему). В таких случаях ползунок нужно будет тянуть в том или ином направлении.

SmallChange – свойство vba принимает целое значение, которое определяет, на какую величину будет перемещаться ползунок при нажатии на кнопки прокрутки.

LargeChange – как и свойство SmallChange позволяет задать шаг перемещения ползунка при нажатии на полосу прокрутки. Значения могут быть в диапазоне от −32 767  до +32 767, по умолчанию значения равны для обоих свойств 1.

Orientation – свойство позволяет указать ориентацию ползунка – горизонтальную или вертикальную. По умолчанию значение ровно 1 – ориентация определяется автоматически исходя из параметров формы, то есть, как полоса прокрутки умещается на объекте UserForm. Можно и явно указать ориентацию объекта ScrollBar, -1 – горизонтальная ориентация и 0 – вертикальная.

Visible – собственно, определяет видимость vba компонента ScrollBar, значение true установлено по умолчанию – объект видим, и false – скрываем элемент управления от глаз пользователя.

Value – позволяет получить значение ползунка, в зависимости от его положения.

Как и большинства элементов управления, основным событием для ScrollBar VBA является событие Change, которое возникает при перемещении ползунка.

Теперь настало время приступить к практике

Откройте редактор Visual Basic (Alt + F11), и в окно редактора Проектов добавьте новую форму и модуль, я назвал форму ScrollForm и модуль ScrollModule, за имя отвечает свойство Name. В редакторе кода для модуля пропишите код:

Sub ScrollModule()
    ScrollForm.Show
End Sub

Тут мы определяем, что при запуске модуля (макроса) с именем ScrollModule надо показать форму с именем ScrollForm, свойство Show делает объекта класса UserForm видимым.

Теперь на поверхности формы нам нужно расположить следующие элементы управления:

Label1 – метка, в которой пропишем текст “Полоса прокрутки”

ScrollBar1 – полоса прокрутки, которая размещается под меткой, она должна быть горизонтальной. С ее помощью мы будет задавать диапазон значений от 1 до 100, и потом будем вычислять сумму заданных чисел.

Label2 – вторая метка, удалите в ней весь текст, в ней мы будет отображать результат суммирования.

Форма VBA с компонентом ScrollBar

Теперь в редакторе кода для формы пропишем следующие процедуры:

Private Sub ScrollBar1_Change()
Dim summ
    summ = 1
    ' вычисляем сумму чисел
    For i = 1 To ScrollBar1.Value
        summ = summ + i
    Next
    Label2.Caption = "Сумма чисел от 1 до " & ScrollBar1.Value & " ровна: " & summ
End Sub
 
Private Sub UserForm_Initialize()
Dim summ
    summ = 1
    ' вычесляем сумму чисел
    For i = 1 To ScrollBar1.Value
        summ = summ + i
    Next
    ' параметры первого текстового поля
    Label1.FontSize = 15
    Label1.ForeColor = &HCD
    Label1.TextAlign = fmTextAlignCenter
    ' параметры полосы прокрутки
    ScrollBar1.Min = 1
    ScrollBar1.Max = 100
    ' параметры второго текстового поля
    Label2.FontSize = 15
    Label2.ForeColor = &HFF0000
    Label2.TextAlign = fmTextAlignCenter
    Label2.Caption = "Сумма чисел от 1 до " & ScrollBar1.Value & " ровна: " & summ
End Sub

ScrollBar1_Change – тут происходит обработка события Change. В цикле происходит суммирование чисел от 1 до ScrollBar1.Value. Тут ScrollBar1.Value содержит выбранное значение на полосе прокрутки, результат суммирования будет хранить переменная summ. Также в свойство Caption объекта Label2 записывается результат суммирования.

UserForm_Initialize – тут происходит определение начальных свойств при инициализации формы.  Размер и текст меток, задается минимальное (один) и максимальное (сто) значение для полос прокрутки. Тут также используется цикл для суммирования значений.

И так, давайте просуммируем: мы рассмотрели пример использования объекта класса ScrollBar VBA языка, который позволяет добавлять на поверхность формы UserForm полосу прокрутки.

Продолжим рассмотрите элементов управления, и следующий элемент, который мы разберем, — «Полоса прокрутки». Сразу перейдем к разработке интерфейса очередного примера. Откроем новую книгу и на листе расположим две полосы прокрутки и два текстовых окна (рис. 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. Зеленый фон в этом случае станет более бледным, а цвет букв серым.

Понравилась статья? Поделить с друзьями:
  • Полноэкранный режим в word 2016
  • Полоса прокрутки excel график
  • Полноэкранный режим word горячие клавиши
  • Полоса прокрутки excel 2013
  • Полоса прокрутки activex excel