No sé si esto es lo que necesitás exactamente, pero puede que te sirva...
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
On Error Resume Next
Dim ctl As Object, rng As Range
Set rng = Range("D1:D10")
For Each ctl In Application.CommandBars("cell").Controls
If ctl.Tag = "jc2xxxx" Then ctl.Delete
Next
If Not Application.Intersect(Target, rng) Is Nothing Then
Set cb = Application.CommandBars("cell").Controls.Add(Type:=msoControlComboBox, temporary:=True)
With cb
.AddItem "uno"
.AddItem "dos"
.AddItem "tres"
.OnAction = "MyMacro"
.BeginGroup = True
.Tag = "jc2xxxx"
.Text = "Elija un Nº..."
End With
Set Cell = Target
Else
Set Cell = Nothing
End If
Set rng = Nothing
End Sub
En un módulo el siguiente código:
Public cb As Office.CommandBarComboBox
Public Cell As Range
Sub MyMacro()
On Error Resume Next
Cell.Value = cb.List(cb.ListIndex)
End Sub
Saludos desde Baires, JuanC