Когда вы щелкаете правой кнопкой мыши по ячейке, 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.