Отвечаю на свой вопрос:
Меню имеет 5 типов controls:
- msoControlButton - кнопка,
- msoControlEdit - текстовое поле,
- msoControlDropdown - выпадающий список (не использовал могу ошибаться),
- msoControlComboBox - комбинированный список (с возможностью ввода данных),
- msoControlPopup - подменю
Для ввода данных посредством меню использовал msoControlEdit со следующим алгоритмом:
Sub CreatePopUp() ' --------------- Создание контекстного меню
Dim cb As CommandBar, m As CommandBarPopup
DeletePopUp
Set cb = CommandBars.Add(PopUpCommandBarName, msoBarPopup, False, True)
With cb
With .Controls.Add(Type:=msoControlButton)
.OnAction = ThisWorkbook.Name & "!DisplayEditPopUpY"
.FaceId = 1146
.Caption = "Поиск X по значению Y= ..."
.TooltipText = "Поиск X по значению Y= ..."
End With
End With
Set cb = Nothing
End Sub
Sub CreatePopEdit(MenuXY As String, PreVal As Double)
Dim cb As CommandBar, m As CommandBarPopup
DeletePopEdit
Set cb = CommandBars.Add(PopUpEditBarName, msoBarPopup, False, True)
With cb
With .Controls.Add(Type:=msoControlEdit)
.Caption = MenuXY
.TooltipText = MenuXY
.Text = PreVal
End With
End With
Set cb = Nothing
End Sub
Sub DeletePopEdit() ' --------------- Удаление контекстного меню
On Error Resume Next
CommandBars(PopUpEditBarName).Delete
On Error GoTo 0
End Sub
Sub DisplayCustomPopUp() ' displays the custom popup menu
On Error Resume Next
Application.CommandBars(PopUpCommandBarName).ShowPopup
On Error GoTo 0
End Sub
Sub DisplayEditPopUpY() ' displays the custom popup menu
On Error Resume Next
PredY = ThisWorkbook.Sheets(1).Range("E3").Value
Call CreatePopEdit("Ведите значение Y=", PredY)
Application.CommandBars(PopUpEditBarName).ShowPopup
PredY = Application.CommandBars(PopUpEditBarName).Controls.Item(1).Text
On Error GoTo 0
End Sub
Переменная PredY - глобальная.
Полагаю, можно через субменю, но не соображу как возвращать введенное значение.