MrShin, у вас в коде обязательно переставлять фокус на элемент управления, к которому хотим вывести меню.
Вот функция, которая определяет прямоугольник для любого объекта на форме, даже для Label
Public Sub GetLeftBottom(ctrl As control, frm As Form, ByRef r2 As RECT)
'Определяет левый нижний угол контрола в экранных координатах
Dim rFPW As RECT 'прямоугольник формы
Dim rFPC As RECT 'прямоугольник клиентского окна формы
Dim RecSel As Long 'учитывает, если есть выделение записи у формы
Dim Zagolov As Long 'учитывает заголовок формы
Dim BorderWidth As Long 'ширина границы
Dim BorderHeight As Long 'высота границ
With frm
GetWindowRect .hWnd, rFPW
GetClientRect .hWnd, rFPC
RecSel = .CurrentSectionLeft / 15
Zagolov = .CurrentSectionTop / 15
End With
BorderWidth = (rFPW.Right - rFPW.Left - rFPC.Right) / 2 'ширина границы формы-владельца
BorderHeight = rFPW.Bottom - rFPW.Top - rFPC.Bottom - BorderWidth 'высота границы сверху (снизу =BorderWidth)
r2.Left = rFPW.Left + BorderWidth + RecSel + ctrl.Left / 15
r2.Right = r2.Left + ctrl.Width / 15
r2.Top = rFPW.Top + BorderHeight + Zagolov + ctrl.Top / 15
r2.Bottom = r2.Top + ctrl.Height / 15
End Sub