Какую версию Visio вы используете? Я так долго возился с RibbonUI, я забыл о скрытии / удалении элементов с помощью CommandBars.
Я, честно говоря, не мог вспомнить, работает ли он даже с лентой. Итак, я повозился, и он действительно работает!
Я думаю, что вам нужен этот идентификатор набора меню:
Visio.visUIObjSetCntx_DrawObjSel
Однако, пройдя по элементам в этом наборе не показывает элемент Показать таблицу форм. Так что этот элемент добавляется Visio особым образом.
Я повозился с некоторым кодом и смог скрыть все, кроме Show ShapeSheet и Hyperlinks . Не знаю, как от них избавиться!
Sub DinkWithRightClickShapeMenu()
'// The following example demonstrates how to retrieve
'// the currently active user interface for your document
'// without replacing the application-level custom user
'// interface, if any.
'// Check if there are document custom menus.
If ThisDocument.CustomMenus Is Nothing Then
'Check if there are Visio custom menus.
If Visio.Application.CustomMenus Is Nothing Then
'Use the built-in menus.
Set visUiObj = Visio.Application.BuiltInMenus
Else
'Use the Visio custom menus.
Set visUiObj = Visio.Application.CustomMenus.Clone
End If
Else
'Use the file custom menus
Set visUiObj = ThisDocument.CustomMenus
End If
Dim menuSetObj As Visio.MenuSet
Dim menuItemsObj As Visio.MenuItems
Dim i As Integer, j As Integer
'// This is the menu set for right-clicking a shape:
Set menuSetObj = visUiObj.MenuSets.ItemAtID(Visio.visUIObjSetCntx_DrawObjSel)
'Set menuSetObj = visUIObj.MenuSets.ItemAtID(Visio.visUIObjSetCntx_BuiltinMenus)
'// List the menu items in the menu set.
'// For Each doesn't work:
Dim mnu As Visio.Menu
Dim mnuItem As Visio.MenuItem
For i = 0 To menuSetObj.Menus.Count - 1
Set mnu = menuSetObj.Menus.Item(i)
Debug.Print "Menu: " & i & ". '" & mnu.Caption & "'"
For j = 0 To mnu.MenuItems.Count - 1
Set mnuItem = mnu.MenuItems(j)
Debug.Print j, mnuItem.Caption
'// Hide every menu item:
mnuItem.Visible = False
'// This was a test to see if I could change the menu text:
'//mnuItem.Caption = mnuItem.Caption & " woohoo"
Debug.Print vbTab & mnuItem.Caption
Next j
Next i
'// Unfortunately, there are still two items left:
'// - Show ShapeSheet
'// - Hyperlinks...
Call Visio.ActiveDocument.SetCustomMenus(visUiObj)
'ThisDocument.SetCustomMenus uiObj
'Call Visio.Application.SetCustomMenus(visUiObj)
'// Restore the normal menus running this in the
'// Immediate window:
'Visio.ActiveDocument.ClearCustomMenus
'// Cleanup:
Set mnuItem = Nothing
Set mnu = Nothing
Set menuSetObj = Nothing
Set visUiObj = Nothing
End Sub