Настройка контекстных меню во всех версиях Microsoft Excel
Сводка. Узнайте, как настраивать контекстные меню в версиях от Excel 97 до Excel 2010.
Дата последнего изменения: 24 апреля 2015 г.
Применимо к: Excel | Excel 2010 | Office 2007 | Office 2010 | SharePoint Server 2010 | VBA
Дата публикации: ноябрь 2010 г.
Содержание
Обзор контекстных меню в Microsoft Office
Обзор контекстных меню в Excel
Настройка контекстных меню в Excel
Добавление элементов управления в контекстное меню ячейки с помощью кода VBA
Добавление элементов управления в контекстное меню ячейки с помощью расширения ленты
Добавление динамического меню в контекстное меню ячейки с помощью кода VBA или расширения ленты
Советы по использованию контекстного меню
Сводка
Дополнительные ресурсы
Обзор контекстных меню в Microsoft Office
Контекстное меню — это меню, которое появляется в результате какого-либо действия пользователя, обычно после щелчка правой кнопкой мыши. В контекстном меню Microsoft Office отображается ограниченный набор операций, доступных в текущем состоянии, или контексте, приложения. Обычно сюда входят действия, связанные с выбранным объектом, например ячейкой или столбцом.
Обзор контекстных меню в Excel
В Microsoft Excel пользователи чаще всего открывают контекстное меню ячейки. Оно отображается, если щелкнуть правой кнопкой мыши одну или несколько выделенных ячеек листа. Но вы можете настроить и многие другие подобные меню. Например, контекстные меню строки и столбца, которые отобразятся, если щелкнуть правой кнопкой мыши заголовок строки или столбца. На рисунке 1 показано контекстное меню ячейки в Microsoft Excel 2010.
Рисунок 1. Контекстное меню ячейки в Excel 2010
Примечание
Раздел NameX, отображенный в нижней части меню, создается надстройкой Microsoft, которая описана ниже в этой статье.
Настройка контекстных меню в Excel
Единственный способ настроить контекстные меню в версиях от Excel 97 до Excel 2007 — использовать код Microsoft Visual Basic для приложений (VBA). Пример такого кода приведен ниже. Тем не менее в Excel 2010 контекстное меню также можно изменять с помощью той же модели расширения ленты (RibbonX), которая применяется при настройке других компонентов пользовательского интерфейса Microsoft Office Fluent для включения ленты и представления Backstage.
Одно из преимуществ настройки контекстных меню в Excel 2010 с помощью RibbonX — возможность добавить элементы управления, которые невозможно добавить в коде VBA. Элементы управления, которые можно добавить в контекстные меню:
button;
checkBox;
control;
dynamicMenu;
gallery;
menu;
menuSeparator;
splitButton;
toggleButton.
Еще раз обращаем ваше внимание, что использование RibbonX для настройки контекстного меню возможно только в Excel 2010. В других версиях Microsoft Excel необходимо использовать код VBA и объект CommandBars.
Добавление элементов управления в контекстное меню ячейки с помощью кода VBA
В примере ниже показано, как добавить настраиваемую кнопку, встроенную кнопку (Сохранить) и вложенное меню в верхнюю часть контекстного меню ячейки.
Примечание
В Microsoft Excel существует два контекстных меню ячейки. Первое — это стандартное меню, а второе появляется при переходе в страничный режим. В таком режиме можно просмотреть данные, которые отображаются на каждой странице, а также быстро задать область печати и разрывы страниц. Для активации такого режима на ленте откройте вкладку Вид, а затем нажмите кнопку Страничный режим. Чтобы изменить второй тип меню, воспользуйтесь приведенным ниже выражением.
Set ContextMenu = Application.CommandBars(Application.CommandBars("Cell").Index + 3)
Эти сведения также применимы к контекстным меню строки и столбца.
Чтобы настроить контекстное меню ячейки, добавьте общий модуль к проекту VBA в книге. Откройте редактор Visual Basic (VBE), нажав клавиши ALT+F11, откройте меню Insert (Вставка), а затем выберите пункт Module (Модуль). Вставьте или введите в модуль шесть приведенных ниже подпрограмм. Первый макрос добавляет элементы управления в контекстное меню ячейки. Второй — удаляет элементы управления из контекстного меню ячейки. Обратите внимание, как теги добавляются к элементам управления и затем используются для их удаления. Остальные четыре макроса запускаются, когда вы нажимаете кнопку или выбираете один из трех параметров во вложенном меню. В этом примере последние четыре макроса изменяют регистр любого текста в ячейке.
Sub AddToCellMenu()
Dim ContextMenu As CommandBar
Dim MySubMenu As CommandBarControl
' Delete the controls first to avoid duplicates.
Call DeleteFromCellMenu
' Set ContextMenu to the Cell context menu.
Set ContextMenu = Application.CommandBars("Cell")
' Add one built-in button(Save = 3) to the Cell context menu.
ContextMenu.Controls.Add Type:=msoControlButton, ID:=3, before:=1
' Add one custom button to the Cell context menu.
With ContextMenu.Controls.Add(Type:=msoControlButton, before:=2)
.OnAction = "'" & ThisWorkbook.Name & "'!" & "ToggleCaseMacro"
.FaceId = 59
.Caption = "Toggle Case Upper/Lower/Proper"
.Tag = "My_Cell_Control_Tag"
End With
' Add a custom submenu with three buttons.
Set MySubMenu = ContextMenu.Controls.Add(Type:=msoControlPopup, before:=3)
With MySubMenu
.Caption = "Case Menu"
.Tag = "My_Cell_Control_Tag"
With .Controls.Add(Type:=msoControlButton)
.OnAction = "'" & ThisWorkbook.Name & "'!" & "UpperMacro"
.FaceId = 100
.Caption = "Upper Case"
End With
With .Controls.Add(Type:=msoControlButton)
.OnAction = "'" & ThisWorkbook.Name & "'!" & "LowerMacro"
.FaceId = 91
.Caption = "Lower Case"
End With
With .Controls.Add(Type:=msoControlButton)
.OnAction = "'" & ThisWorkbook.Name & "'!" & "ProperMacro"
.FaceId = 95
.Caption = "Proper Case"
End With
End With
' Add a separator to the Cell context menu.
ContextMenu.Controls(4).BeginGroup = True
End Sub
Sub DeleteFromCellMenu()
Dim ContextMenu As CommandBar
Dim ctrl As CommandBarControl
' Set ContextMenu to the Cell context menu.
Set ContextMenu = Application.CommandBars("Cell")
' Delete the custom controls with the Tag : My_Cell_Control_Tag.
For Each ctrl In ContextMenu.Controls
If ctrl.Tag = "My_Cell_Control_Tag" Then
ctrl.Delete
End If
Next ctrl
' Delete the custom built-in Save button.
On Error Resume Next
ContextMenu.FindControl(ID:=3).Delete
On Error GoTo 0
End Sub
Sub ToggleCaseMacro()
Dim CaseRange As Range
Dim CalcMode As Long
Dim cell As Range
On Error Resume Next
Set CaseRange = Intersect(Selection, _
Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues))
On Error GoTo 0
If CaseRange Is Nothing Then Exit Sub
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
For Each cell In CaseRange.Cells
Select Case cell.Value
Case UCase(cell.Value): cell.Value = LCase(cell.Value)
Case LCase(cell.Value): cell.Value = StrConv(cell.Value, vbProperCase)
Case Else: cell.Value = UCase(cell.Value)
End Select
Next cell
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub
Sub UpperMacro()
Dim CaseRange As Range
Dim CalcMode As Long
Dim cell As Range
On Error Resume Next
Set CaseRange = Intersect(Selection, _
Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues))
On Error GoTo 0
If CaseRange Is Nothing Then Exit Sub
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
For Each cell In CaseRange.Cells
cell.Value = UCase(cell.Value)
Next cell
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub
Sub LowerMacro()
Dim CaseRange As Range
Dim CalcMode As Long
Dim cell As Range
On Error Resume Next
Set CaseRange = Intersect(Selection, _
Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues))
On Error GoTo 0
If CaseRange Is Nothing Then Exit Sub
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
For Each cell In CaseRange.Cells
cell.Value = LCase(cell.Value)
Next cell
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub
Sub ProperMacro()
Dim CaseRange As Range
Dim CalcMode As Long
Dim cell As Range
On Error Resume Next
Set CaseRange = Intersect(Selection, _
Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues))
On Error GoTo 0
If CaseRange Is Nothing Then Exit Sub
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
For Each cell In CaseRange.Cells
cell.Value = StrConv(cell.Value, vbProperCase)
Next cell
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub
Скопируйте две приведенные ниже процедуры обработки событий в модуль ThisWorkbook книги. Эти события автоматически добавят элементы управления в контекстное меню ячейки в случае открытия или активации книги и удалят их, когда вы ее закроете или отключите.
Private Sub Workbook_Activate()
Call AddToCellMenu
End Sub
Private Sub Workbook_Deactivate()
Call DeleteFromCellMenu
End Sub
Чтобы просмотреть изменения в контекстном меню ячейки, сохраните книгу, затем закройте и снова откройте ее. Контекстное меню ячейки должно выглядеть, как показано на рисунке 2.
Рисунок 2. Настроенное контекстное меню ячейки
Добавление элементов управления в контекстное меню ячейки с помощью расширения ленты
В этом примере рассматривается создание тех же кнопок и вложенных меню, которые были описаны ранее. Теперь для создания элементов управления в Excel 2010 используется RibbonX. Этот вариант изменения контекстного меню невозможно применить в версиях от Excel 97 до Excel 2007.
Примечание
Дополнительные сведения о редакторе настраиваемого пользовательского интерфейса и использовании RibbonX для настройки пользовательского интерфейса Microsoft Office см. на веб-сайте Рона дю Брана, посвященном ленте.
Идентификатор контекстного меню ячейки в страничном режиме в Excel 2010 отличается от идентификатора обычного контекстного меню ячейки. Идентификаторы этого и других контекстных меню можно найти с помощью надстройки Microsoft, о которой речь пойдет далее в этой статье.
Как добавить XML-код для добавления элементов управления в контекстное меню
Откройте в Excel 2010 новую книгу и сохраните ее, как книгу с поддержкой макросов (XLSM).
Закройте книгу.
Откройте книгу в редакторе настраиваемого пользовательского интерфейса (дополнительные сведения см. в предыдущем разделе), откройте вкладку Insert (Вставка), а затем выберите пункт Office 2010 Custom UI Part (Настраиваемая часть пользовательского интерфейса Office 2010).
Вставьте следующий XML-код в окно "Office 2010 Custom UI Part" (Настраиваемая часть пользовательского интерфейса Office 2010).
<customUI xmlns="https://schemas.microsoft.com/office/2009/07/customui"> <contextMenus> <contextMenu idMso="ContextMenuCell"> <button idMso="FileSave" insertBeforeMso="Cut" /> <button id="MyButton" label="Toggle Case Upper/Lower/Proper" insertBeforeMso="Cut" onAction="ToggleCaseMacro" imageMso="HappyFace"/> <menu id="MySubMenu" label="Case Menu" insertBeforeMso="Cut" > <button id="Menu1Button1" label="Upper Case" imageMso="U" onAction="UpperMacro"/> <button id="Menu1Button2" label="Lower Case" imageMso="L" onAction="LowerMacro"/> <button id="Menu1Button3" label="Proper Case" imageMso="P" onAction="ProperMacro"/> </menu> <menuSeparator id="MySeparator" insertBeforeMso="Cut" /> </contextMenu> </contextMenus> </customUI>
Сохраните изменения и закройте редактор.
Откройте книгу в Excel 2010.
Скопируйте или введите следующие четыре макроса в общий модуль в VBE и сохраните книгу.
Sub ToggleCaseMacro(control As IRibbonControl) Dim CaseRange As Range Dim CalcMode As Long Dim cell As Range On Error Resume Next Set CaseRange = Intersect(Selection, _ Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues)) If CaseRange Is Nothing Then Exit Sub With Application CalcMode = .Calculation .Calculation = xlCalculationManual .ScreenUpdating = False .EnableEvents = False End With For Each cell In CaseRange Select Case cell.Value Case UCase(cell.Value): cell.Value = LCase(cell.Value) Case LCase(cell.Value): cell.Value = StrConv(cell.Value, vbProperCase) Case Else: cell.Value = UCase(cell.Value) End Select Next cell With Application .ScreenUpdating = True .EnableEvents = True .Calculation = CalcMode End With End Sub Sub UpperMacro(control As IRibbonControl) Dim CaseRange As Range Dim CalcMode As Long Dim cell As Range On Error Resume Next Set CaseRange = Intersect(Selection, _ Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues)) If CaseRange Is Nothing Then Exit Sub With Application CalcMode = .Calculation .Calculation = xlCalculationManual .ScreenUpdating = False .EnableEvents = False End With For Each cell In CaseRange cell.Value = UCase(cell.Value) Next cell With Application .ScreenUpdating = True .EnableEvents = True .Calculation = CalcMode End With End Sub Sub LowerMacro(control As IRibbonControl) Dim CaseRange As Range Dim CalcMode As Long Dim cell As Range On Error Resume Next Set CaseRange = Intersect(Selection, _ Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues)) If CaseRange Is Nothing Then Exit Sub With Application CalcMode = .Calculation .Calculation = xlCalculationManual .ScreenUpdating = False .EnableEvents = False End With For Each cell In CaseRange cell.Value = LCase(cell.Value) Next cell With Application .ScreenUpdating = True .EnableEvents = True .Calculation = CalcMode End With End Sub Sub ProperMacro(control As IRibbonControl) Dim CaseRange As Range Dim CalcMode As Long Dim cell As Range On Error Resume Next Set CaseRange = Intersect(Selection, _ Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues)) If CaseRange Is Nothing Then Exit Sub With Application CalcMode = .Calculation .Calculation = xlCalculationManual .ScreenUpdating = False .EnableEvents = False End With For Each cell In CaseRange cell.Value = StrConv(cell.Value, vbProperCase) Next cell With Application .ScreenUpdating = True .EnableEvents = True .Calculation = CalcMode End With End Sub
В книге щелкните правой кнопкой мыши ячейку с текстом и убедитесь, что контекстное меню ячейки изменилось.
Выберите параметры изменения регистра в верхней части контекстного меню, чтобы увидеть, как меняется текст ячейки.
Предупреждение
Когда вы закрываете книгу, удаляются все элементы управления, добавленные вами в контекстное меню ячейки. Тем не менее, если вы откроете другую книгу, не закрывая при этом текущую, в контекстном меню ячейки сохранится добавленная вами встроенная кнопка Сохранить. Эта проблема возникает при добавлении встроенных элементов управления в контекстное меню. Если вы хотите ее избежать, вместо встроенной добавьте настраиваемую кнопку, вызывающую макрос, который выполняет встроенную команду Сохранить.
Чтобы добавить настраиваемую кнопку со встроенной командой, замените выражение <button idMso="FileSave" insertBeforeMso="Cut" /> выражением <button id="DuplicateBuiltInButton1" label="Save" insertBeforeMso="Cut" onAction="BuiltInSaveCommand" imageMso="FileSave"/>. Затем в VBE добавьте приведенный ниже макрос, который вызывается атрибутом onAction.
Sub BuiltInSaveCommand(control As IRibbonControl)
CommandBars.ExecuteMso "FileSave"
End Sub
Кроме того, можно использовать метод ActiveWorkbook.Save. С помощью метода ExecuteMso можно выполнить любые встроенные элементы управления в пользовательском интерфейсе Microsoft Office Fluent.
Добавление динамического меню в контекстное меню ячейки с помощью кода VBA или расширения ленты
Динамические меню указывают на процедуры обратного вызова, которые создают меню в среде выполнения. Элемент управления dynamicMenu включает в себя атрибут getContent, указывающий на процедуру обратного вызова GetContent.
Ниже приводится образец XML для RibbonX, который создает динамическое меню в контекстном меню ячейки.
<customUI xmlns="https://schemas.microsoft.com/office/2009/07/customui">
<contextMenus>
<contextMenu idMso="ContextMenuCell">
<dynamicMenu id="MyDynamicMenu"
label= "My Dynamic Menu" imageMso="HappyFace"
getContent="GetContent" insertBeforeMso="Cut"/>
</contextMenu>
</contextMenus>
</customUI>
Например, код VBA ниже создает в среде выполнения динамическое меню с двумя кнопками. Это значит, что оно будет создано, только если выбрать элемент управления меню в контекстном меню.
Sub GetContent(control As IRibbonControl, ByRef returnedVal)
Dim xml As String
xml = "<menu xmlns=""https://schemas.microsoft.com/office/2009/07/customui"">" & _
"<button id=""but1"" imageMso=""Help"" label=""Help"" onAction=""HelpMacro""/>" & _
"<button id=""but2"" imageMso=""FindDialog"" label=""Find"" onAction=""FindMacro""/>" & _
"</menu>"
returnedVal = xml
End Sub
Sub HelpMacro(control As IRibbonControl)
MsgBox "Help macro"
End Sub
Sub FindMacro(control As IRibbonControl)
MsgBox "Find macro"
End Sub
Предлагаем скачать три примера книг, с помощью которых можно добавить динамическое меню в контекстное меню ячейки, учитывая имя пользователя, язык, используемый в Excel, или значение активной ячейки (формула, пустая ячейка, числовой или текстовый формат). Просмотреть всю информацию о примерах в соответствующей книге, а также скачать эти три книги можно на веб-сайте Рона дю Брана.
Советы по использованию контекстного меню
В этом разделе рассказано, как изменить представленный в статье код так, чтобы процедуры больше соответствовали вашим целям.
В примере VBA, приведенном в начале статьи, мы показали, как изменить контекстное меню ячейки с помощью событий Activate и Deactivate книги, которые вызывают макрос для создания и удаления элементов управления меню.
В примере ниже показано, как изменить событие Activate так, чтобы создавать различные меню для разных пользователей. Так можно создавать меню с различными наборами настраиваемых элементов управления отдельно для каждого пользователя.
Private Sub Workbook_Activate()
Dim sUserName As String
sUserName = Application.UserName
Select Case sUserName
Case "Ron de Bruin": Call AddToCellMenu
Case "Nancy Davolio": Call AddToCellMenu2
Case Else: Call AddToCellMenu3
End Select
End Sub
Другим примером может послужить поиск регионального языка Excel в событии Activate, с тем чтобы заголовки в контекстном меню создавались на языке пользователя. Ниже приводится пример кода, при открытии книги вызывающий разные макросы в зависимости от настройки регионального языка на компьютере пользователя.
Private Sub Workbook_Activate()
Dim LangID As Long
LangID = Application.International(xlCountryCode)
Select Case LangID
Case 31: Call AddToCellMenuInDutch
Case 49: Call AddToCellMenuinGerman
Case Else: Call AddToCellMenu
End Select
End Sub
Примечание
Дополнительные сведения о подобных проблемах см. на веб-странице, посвященной использованию Excel в различных странах, на веб-сайте Рона де Брана.
Фрагмент кода VBA, позволяющий включить и отключить элемент управления Вставить примечание в контекстном меню ячейки в версиях от Excel 97 до Excel 2010: Application.CommandBars("Cell").FindControl(ID:=2031).Enabled = False.
Примечание
Надстройка, описанная в конце этой статьи, помогает найти идентификатор всех элементов управления контекстного меню.
Кроме того, чтобы добавить идентификатор в заголовок, можно использовать приведенный ниже макрос. Обратите внимание, что контекстное меню ячейки может отличаться в разных версиях Excel.
Sub Add_ID_To_ContextMenu_Caption()
' Add the Id to the caption of the context menu controls.
Dim ctl As CommandBarControl
For Each ctl In Application.CommandBars("Cell").Controls
On Error Resume Next
ctl.Caption = ctl.ID & " ::: " & ctl.Caption
On Error GoTo 0
Next ctl
End Sub
Sub Reset_ContextMenu()
' Remove the Id of the caption of the context menu controls.
Dim ctl As CommandBarControl
Dim myPos As Long
For Each ctl In Application.CommandBars("Cell").Controls
myPos = InStr(1, ctl.Caption, " ::: ", vbTextCompare)
If myPos > 0 Then
ctl.Caption = Mid(ctl.Caption, myPos + 4)
End If
Next ctl
End Sub
Sub Reset_ContextMenu_To_Factory_Defaults()
Application.CommandBars("Cell").Reset
End Sub
Включить и отключить элементы управления можно с помощью событий Activate и Deactivate, описанных ранее.
Чтобы отключить элемент управления Удалить в контекстном меню ячейки с помощью RibbonX, добавьте выражение <button idMso="CellsDelete" enabled="false" /> в элемент управления contextMenu в XML-коде, приведенном выше в разделе Добавление элементов управления в контекстное меню ячейки с помощью расширения ленты этой статьи.
Как показывает пример выражения, для отключения элемента управления в контекстном меню нужно знать его идентификатор (idMso). Это может вызвать определенные затруднения, так как подобные сведения доступны не для всех элементов управления в контекстном меню. Например, такая информация отсутствует для контекстных меню ячейки, строки и столбца. Кроме того, отсутствует список идентификаторов элементов управления, поддерживаемых в ленте RibbonX. В качестве обходного решения для отключения определенного элемента управления можно использовать код VBA, сходный с описанным в предыдущем разделе.
Итак, как найти имена других контекстных меню, которые нужно изменить? Приведенный ниже макрос добавляет кнопку с именем меню в конце каждого контекстного меню. Невозможно просмотреть имя любого контекстного меню при его запуске в Excel 2007 или Excel 2010. Например, вы не увидите имя меню, если щелкнете правой кнопкой мыши фигуру или рисунок в Excel 2007 или Excel 2010. Поэтому не удастся изменить эти меню в Excel 2007 или Excel 2010 с помощью VBA.
Sub Add_Name_To_Contextmenus()
Dim Cbar As CommandBar
For Each Cbar In Application.CommandBars
With Cbar
If .Type = msoBarTypePopup Then
On Error Resume Next
With .Controls.Add(Type:=msoControlButton)
.Caption = "Name for VBA = " & Cbar.Name
.Tag = "NameButtonInContextMenu"
End With
On Error GoTo 0
End If
End With
Next
End Sub
Sub Delete_Name_From_Contextmenus()
Dim Cbar As CommandBar
Dim ctrl As CommandBarControl
For Each Cbar In Application.CommandBars
With Cbar
If .Type = msoBarTypePopup Then
For Each ctrl In .Controls
If ctrl.Tag = "NameButtonInContextMenu" Then
ctrl.Delete
End If
Next ctrl
End If
End With
Next
End Sub
Ниже приводятся ссылки на файлы, содержащие идентификаторы и значения FaceId изображений для всех элементов управления в большинстве контекстных меню, если необходимо изменить такое меню с помощью VBA.
Скачайте надстройку BtnFace, разработанную Джимом Речем, чтобы найти все значения FaceId изображений для элементов управления, на этой веб-странице.
Чтобы найти идентификаторы элементов управления и идентификаторы их изображений, откройте веб-страницу Оле П. Ерландсена.
Веб-страница Джона Волкенбаха поможет найти идентификаторы всех изображений элементов управления.
Если необходимо изменить контекстные меню с помощью RibbonX, используйте приведенную ниже ссылку на файлы, содержащие значения idMso или imageMso для всех элементов управления в большинстве контекстных меню.
http://www.rondebruin.nl/ribbon.htm#images
С помощью надстройки Microsoft COM можно найти имена всех контекстных меню в Microsoft Office 2010. Кроме того, эта надстройка добавляет в нижней части контекстного меню кнопку, благодаря которой вы найдете имена большинства контекстных меню.
Сводка
Эта статья содержит следующую информацию:
В версиях от Excel 97 до Excel 2003 элементы управления в любое контекстное меню можно добавлять, используя код VBA, хотя эта возможность не проверена для всех сценариев. При этом невозможно изменить контекстные меню с помощью RibbonX.
В Excel 2007 элементы управления в большинство контекстных меню можно добавлять с помощью кода VBA. Тем не менее некоторые контекстные меню, такие как контекстные меню фигур и изображений, не удастся изменить, используя VBA. К тому же, невозможно изменять контекстные меню с помощью RibbonX.
В Excel 2010 с помощью кода VBA можно добавить элементы управления в большинство контекстных меню. Тем не менее существуют те же ограничения на изменение некоторых контекстных меню с помощью VBA, что и в Excel 2007. Кроме того, используя RibbonX, можно добавлять кнопки и меню во все контекстные меню, но если нужно отключить элементы управления или изменить их назначение, вы можете не найти необходимые идентификаторы (idMso).
Дополнительные ресурсы
Подробнее с темами, раскрытыми в этой статье, можно ознакомиться на следующих ресурсах: