Я понимаю, что это старый пост, но я считаю, что есть более эффективный метод.
Userform Контекстное меню код класса
http://www.andypope.info/vba/uf_contextualmenu.htm
Есть даже примеры таблиц Excel для примеров кода.
Модуль класса управляет построением контекстного меню, захватом щелчка правой кнопкой мыши в текстовых полях и фактическим вырезом. Копирование и вставка действий. Класс использует объект ActiveControl пользовательской формы. Код даже обрабатывает элементы управления внутри элементов управления контейнера, таких как Frames и Multipage.
Следующий код инициализации от пользовательской формы показывает, насколько просто определить и использовать объект класса. Вам нужно только объявить переменную для объекта, а затем установить ссылку для каждого текстового поля, которое вы хотите иметь возможности контекстного меню. Вы можете просматривать все элементы управления и автоматически ссылаться на каждое текстовое поле.
Private m_colContextMenus As Collection
Private Sub UserForm_Initialize()
Dim clsContextMenu As CTextBox_ContextMenu
Dim cTRL as Control
Set m_colContextMenus = New Collection
For Each cTRL In Me.Controls
Select Case TypeName(cTRL)
Case "TextBox"
'MsgBox cTRL.Name & ": " & Me.Controls(cTRL.Name).Value
Set clsContextMenu = New CTextBox_ContextMenu
With clsContextMenu
Set .TBox = Me.Controls(cTRL.Name)
Set .Parent = Me
End With
m_colContextMenus.Add clsContextMenu, CStr(m_colContextMenus.Count + 1)
Case Else
'MsgBox TypeName(cTRL) & ": " & cTRL.Name
End Select
Next
End Sub
Загрузить пример рабочей книги, содержащей файлы .xls и .xlsm