Excel. Трюки и эффекты | страница 149
Добавим на вкладку Надстройки пользовательскую команду Линии сетки. С помощью данной команды можно будет управлять отображением сетки на текущем рабочем листе.
Итак, в стандартном модуле редактора VBA напишем код, который представлен в листинге 3.104.
Dim AppObject As New Class1
Sub AddCommand()
Dim cbrpBar As CommandBarPopup
' Удаление аналогичной команды (при ее наличии)
Call DeleteCommand
' Получение доступа к меню «Вид»
Set cbrpBar = CommandBars(1).FindControl(ID:=30004)
If cbrpBar Is Nothing Then
' Не удалось получить доступ к меню
MsgBox «Невозможно добавить элемент меню.»
Exit Sub
Else
' Добавление команды
With cbrpBar.Controls.Add(Type:=msoControlButton)
.Caption = «&Линии сетки»
.OnAction = «GhangeGridlinesState»
End With
End If
' Даем объекту AppObject обрабатывать события
Set AppObject.AppEvents = Application
End Sub
Sub DeleteCommand()
' Удаление каманды из меню (если она там есть)
On Error Resume Next
CommandBars(1).FindControl(ID:=30004). _
Controls(«&Линии сетки»).Delete
End Sub
Sub GhangeGridlinesState()
' Изменение состояния отображения линий сетки _
на противоположное (если нет – покажем, если есть – скроем)
If TypeName(ActiveSheet) = «Worksheet» Then
ActiveWindow.DisplayGridlines = _
Not ActiveWindow.DisplayGridlines
' Установка или снятие флажка в меню
Call CheckGridlines
End If
End Sub
Sub CheckGridlines()
Dim button As CommandBarButton
On Error Resume Next
' Поиск команды «Линии сетки» в меню «Вид»
Set button = CommandBars(1).FindControl(ID:=30004). _
Controls(«&Линии сетки»)
' Изменение состояния флажка на противоположное
If ActiveWindow.DisplayGridlines Then
' Установка
button.State = msoButtonDown
Else
' Снятие
button.State = msoButtonUp
End If
End Sub
После этого в редакторе VBA необходимо создать модуль класса и поместить в него следующий код (листинг 3.105).
Public WithEvents AppEvents As Application
' Обработка события активации листа
Sub AppEvents_SheetActivate(ByVal Sh As Object)
Call CheckGridlines
End Sub
' Обработка события активации книги
Sub AppEvents_WorkbookActivate(ByVal Wb As Excel.Workbook)
Call CheckGridlines
End Sub
' Обработка события активации окна
Sub AppEvents_WindowActivate _
(ByVal Wb As Workbook, ByVal Wn As Window)
Call CheckGridlines
End Sub
В результате выполнения макроса AddCommand (после написания кода этот макрос появится в окне выбора макросов) на вкладку Надстройки будет добавлена команда Линии сетки, с помощью которой можно включать/выключать отображение сетки на текущем рабочем листе (рис. 3.42).