Добавление команды «Линии сетки»

We use cookies. Read the Privacy and Cookie Policy

Добавим на вкладку Надстройки пользовательскую команду Линии сетки. С помощью данной команды можно будет управлять отображением сетки на текущем рабочем листе.

Итак, в стандартном модуле редактора VBA напишем код, который представлен в листинге 3.104.

Листинг 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).

Листинг 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).

Рис. 3.42. Добавление команды на вкладку Надстройки

Если в данный момент сетка отображается, то возле команды Линии сетки будет установлен флажок. При выключении отображения сетки этот флажок пропадает.

Для удаления команды Линии сетки нужно выполнить макрос DeleteCommand (он также будет доступен в окне выбора макросов после написания приведенного выше кода).