После того как данный код написан, в окне выбора макросов появятся макросы CreateMenu и DeleteMflenu – соответственно для создания и удаления пользовательского меню. Для удобства работы можно назначить каждому макросу кнопки.
Пользовательское меню, созданное на основании приведенных на рис. 3.34 исходных данных, показано на рис. 3.35.
Рис. 3.35. Пользовательское меню Выручка
Новое меню будет автоматически формироваться при каждом открытии рабочей книги и удаляться при ее закрытии.
Создание контекстного меню
В предыдущих разделах мы рассматривали различные способы формирования пользовательских меню, которые впоследствии отображались на вкладке Надстройки. Здесь же мы научимся создавать контекстное меню.
Итак, создадим пользовательское контекстное меню со следующими командами: Числовой формат, Выравнивание, Шрифт, Границы, Узор и Защита. С помощью этих команд на экран будет выводиться окно форматирования ячейки (вызываемое также нажатием комбинации клавиш Ctrl+1) с соответствующей открытой вкладкой. Созданное меню будет вызываться щелчком правой кнопки мыши на любой ячейке диапазона A2:D5.
Для решения поставленной задачи необходимо написать три кода: в модуле рабочего листа, в модуле Эта Книга и в стандартном модуле.
Код, который нужно поместить в модуль рабочего листа, выглядит следующим образом (листинг 3.94).
Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, _
Cancel As Boolean)
' Проверка, попадает ли выделенная ячейка в диапазон
If Union(Target.Range(«A1»), Range(«A2:D5»)).Address = _
Range(«A2:D5»).Address Then
' Показываем свое контекстное меню
CommandBars(«MyContextMenu»).ShowPopup
Cancel = True
End If
End Sub
После этого в модуль Эта Книга необходимо поместить код, приведенный в листинге 3.95.
Sub Workbook_Open()
' Создание контекстного меню при открытии книги
Call CreateCustomContextMenu
End Sub
Sub Workbook_BeforeClose(Cancel As Boolean)
' Удаление меню при закрытии книги
Call DeleteCustomContextMenu
End Sub
В стандартном модуле нужно написать самый большой код – его содержимое представлено в листинге 3.96.