Добавление элементов в контекстное меню (Microsoft Excel)
Когда вы щелкаете правой кнопкой мыши по ячейке, Excel предоставляет вам многофункциональное контекстное меню, которое позволяет вам делать любое количество вещей. Вы можете захотеть добавить некоторые функции в это контекстное меню, особенно если вы часто используете их.
К сожалению, вы не можете редактировать контекстные меню так же, как вы можете редактировать другие меню, используя «Настроить» в меню «Инструменты». Вместо этого вы должны управлять контекстными меню через VBA.
Если вы хотите добавить элемент в контекстное меню, которое появляется при щелчке правой кнопкой мыши по ячейке, вы можете использовать следующий код:
Sub AddItemToContextMenu() Dim cmdNew As CommandBarButton Set cmdNew = CommandBars("cell").Controls.Add With cmdNew .Caption = "My Procedure" .OnAction = "MyProcedure" .BeginGroup = True End With End Sub
Все, что вам нужно сделать, это установить для свойства .Caption любой текст меню, который вы хотите использовать, а затем изменить свойство .OnAction так, чтобы оно указывало на макрос или команду, которую вы хотите использовать. Когда позже вы захотите удалить опцию меню, вы можете использовать следующий макрос:
Sub RemoveContextMenuItem() On Error Resume Next CommandBars("cell").Controls("My Procedure").Delete End Sub
Чтобы использовать это, измените текст «Моя процедура» на любой текст, который вы использовали в свойстве .Caption предыдущего макроса. Оператор On Error используется в этом макросе на случай, если указанный элемент макроса не был добавлен ранее.
Немного изменив макрос, вы можете указать, что добавление в контекстное меню должно происходить только при щелчке правой кнопкой мыши по определенным ячейкам. Следующий макрос проверяет, щелкаете ли вы ячейку в диапазоне C10: E25. Если да, то он добавляет пункт меню для вашей процедуры в конец контекстного меню.
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _ Cancel As Boolean) Dim cmdNew As CommandBarButton For Each icbc In Application.CommandBars("cell").Controls If icbc.Tag = "brccm" Then icbc.Delete Next icbc If Not Application.Intersect(Target, Range("c10:e25")) _ Is Nothing Then Set cmdNew = CommandBars("cell").Controls.Add With cmdNew .Caption = "My Procedure" .OnAction = "MyProcedure" .BeginGroup = True .Tag = "brccm" End With End If End Sub
В редакторе VBA этот макрос необходимо добавить на конкретный рабочий лист, с которым вы хотите его использовать. Все, что вам нужно сделать, это дважды щелкнуть этот лист в Project Explorer (верхний левый угол редактора VBA), а затем ввести его в окно кода для этого листа.
Как и в случае с предыдущим макросом, все, что вам нужно сделать, это изменить настройки, указанные для свойств .Caption и .OnAction. Кроме того, вы можете изменить диапазон ячеек, который считается «допустимым» при добавлении пункта меню — просто измените спецификацию диапазона «c: 10: e25» на желаемый диапазон. Вы даже можете использовать именованный диапазон вместо диапазона ячеек, что отлично, если ваш допустимый диапазон действительно представляет собой набор несмежных ячеек.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (2064) применим к Microsoft Excel 97, 2000, 2002 и 2003.