Отображение панели инструментов при определенном условии
Можно сделать так, что созданная пользователем панель инструментов будет отображаться на экране (а именно – на вкладке Надстройки) только при выполнении какого-либо условия. В данном разделе мы рассмотрим прием, после реализации которого созданная пользователем панель инструментов будет отображаться лишь тогда, когда курсор находится в определенном диапазоне.
В модуле рабочего листа напишем следующий код (листинг 3.89).
Листинг 3.89. Код в модуле рабочего листа
Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
' Проверка условия отображения
If Union(Target, Range(«A1:D5»)).Address = _
Range(«A1:D5»).Address Then
' Условие выполнено – можно показывать панель
CommandBars(«AutoSense»).Visible = True
Else
' Условие не выполнено – панель нужно скрыть
CommandBars(«AutoSense»).Visible = False
End If
End Sub
Из содержимого данного кода видно, что условием отображения пользовательской панели инструментов на вкладке Надстройки будет выделение любой ячейки диапазона A1:D5 (либо выделение произвольного диапазона внутри данного диапазона).
Теперь необходимо написать в стандартном модуле код, содержимое которого приведено в листинге 3.90. Для начала работы с панелью необходимо запустить макрос CreatePanel.
Листинг 3.90. Код в стандартном модуле
Sub CreatePanel()
Dim cbrBar As CommandBar
Dim button As CommandBarButton
Dim i As Integer
' Удаление одноименной панели (при ее наличии)
On Error Resume Next
CommandBars(«AutoSense»).Delete
On Error GoTo 0
' Создание панели инструментов
Set cbrBar = CommandBars.Add
' Создание кнопок и их настройка
For i = 1 To 4
Set button = cbrBar.Controls.Add(msoControlButton)
With button
.OnAction = «ButtonClick» & i
.FaceId = i + 37
End With
Next i
cbrBar.Name = «AutoSense»
End Sub
Sub ButtonClick3()
' Перемещение вниз
On Error Resume Next
ActiveCell.Offset(1, 0).Activate
End Sub
Sub ButtonClick1()
' Перемещение вверх
On Error Resume Next
ActiveCell.Offset(-1, 0).Activate
End Sub
Sub ButtonClick2()
' Перемещение вправо
On Error Resume Next
ActiveCell.Offset(0, 1).Activate
End Sub
Sub ButtonClick4()
' Перемещение влево
On Error Resume Next
ActiveCell.Offset(0, -1).Activate
End Sub
Созданная панель инструментов называется AutoSense и включает в себя четыре кнопки со стрелками, предназначенные для перемещения курсора на одну ячейку в соответствующем направлении. Эта панель будет отображаться на вкладке Надстройки только при условии, что курсор расположен внутри диапазона A1:D5. Если курсор вывести из этого диапазона даже с помощью кнопок данной панели, то она перестанет отображаться и появится вновь только при соблюдении указанного условия.