You may do like this:
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim Bar As CommandBar
Dim NewControl As CommandBarButton
Dim pt As POINTAPI
' remove existing
On Error Resume Next
Application.CommandBars("MyCell").Delete
On Error GoTo 0
' cancel regular cell menu
Cancel = True
' make popup menu
Set Bar = Application.CommandBars.Add("MyCell", msoBarPopup)
'Add move to scratch control
Set NewControl = Bar.Controls.Add _
(Type:=msoControlButton, ID:=21, _
temporary:=True)
With NewControl
.Caption = "&Move to Scratch"
.OnAction = "Move_To_Scratch"
.Style = msoButtonIconAndCaption
End With
'Add Copy Selection control
Set NewControl = Bar.Controls.Add _
(Type:=msoControlButton, ID:=19, _
temporary:=True)
With NewControl
.Caption = "&Copy Selection"
.OnAction = "Copy1"
.Style = msoButtonIconAndCaption
End With
'Add paste selection control
Set NewControl = Bar.Controls.Add _
(Type:=msoControlButton, ID:=997, _
temporary:=True)
With NewControl
.Caption = "&Paste selection"
.OnAction = "Paste1"
.Style = msoButtonIconAndCaption
End With
'Add selection control
Set NewControl = Bar.Controls.Add _
(Type:=msoControlButton, ID:=374, _
temporary:=True)
With NewControl
.Caption = "&Select Trip"
.OnAction = "Select_Trip"
.Style = msoButtonIconAndCaption
End With
'Add delete control
Set NewControl = Bar.Controls.Add _
(Type:=msoControlButton, ID:=9523, _
temporary:=True)
With NewControl
.Caption = "&Delete Trip"
.OnAction = "Delete1"
.Style = msoButtonIconAndCaption
End With
Application.Calculation = xlCalculationManual 'Turn off calculation
GetCursorPos pt
Bar.ShowPopup pt.X, pt.Y - Bar.Height / 2
End Sub
However if this will position menu off screen Excel will move it.
Bookmarks