Excel + VBA: изменение контекстного меню при нажатии над автофигурами - PullRequest
1 голос
/ 16 марта 2009

Я делаю небольшое приложение Excel + vba, и я застрял. Я знаю, что используя

Application.CommandBars("Cell").Controls.* 

Я могу изменить контекстное меню, чтобы показывать только определенные опции для конкретной ячейки (конечно, с дополнительным кодом).

Но есть ли способ изменить меню, когда я нажимаю правую кнопку мыши над автофигурой?

Я использовал что-то вроде

(...)
'checking autoshape position
sh_le = sh.Left
sh_to = sh.Top
sh_ri = sh.Left + sh.Width
sh_do = sh.Top + sh.Height

'checking clicked cell position
cc_le = cel.Left
cc_to = cel.Top
cc_ri = cel.Left + cel.Width
cc_do = cel.Top + cel.Height

If (sh_le <= cc_le) And (sh_to <= cc_to) And (sh_ri >= cc_ri) And (sh_do >= cc_do) Then  
 'build custom menu
end if

Это выглядит хорошо (по крайней мере, я так думаю :) - но когда я нажимаю выше формы, Worksheet_BeforeRightClick не запускается. Есть ли другой способ сделать это? Буду благодарен за любую информацию.

Ответы [ 2 ]

1 голос
/ 17 марта 2009

Существует недокументированная функциональная панель, которая означает, что это событие может не сработать, пока вы не закроете файл и не откроете его снова.

Дайте этому попытку.

0 голосов
/ 28 апреля 2009

Я реализовал этот способ. Как в коде OnAction = "openOrder" , где openOrder - Открытый модуль для выполнения работы.

Вы можете изменить CommandBars ("Ячейка"). Элементы управления на CommandBars ("Формы"). Элементы управления

Private Sub Workbook_Deactivate()
    On Error Resume Next
    Application.CommandBars("Cell").Controls("View order").Delete
    On Error GoTo 0
End Sub

        Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

        Dim cBut As CommandBarButton

        On Error Resume Next

        If IneedCustomMenu=TRUE Then
            On Error Resume Next
            Set cBut = Application.CommandBars("Cell").Controls.Add(Temporary:=True)
                With cBut
                   .Caption = "View order"
                   .Style = msoButtonCaption
                   .OnAction = "openOrder"
                End With
            On Error GoTo 0
        Else
               On Error Resume Next
               With Application
                        .CommandBars(Cell).Controls("View order").Delete
               End With
        End If
       End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...