Excel VBA-добавить подменю в пользовательское контекстное меню


Долгое время зритель, первый раз плакат. У меня есть форма с функциями щелчка правой кнопкой мыши, которые прекрасно работают. Я пытаюсь добавить подменю в Главное меню правой кнопкой мыши, чтобы отделить некоторые функции / команды. Мне нужно / нужно вставить раздел, в котором находится "Select Case", однако он показывает только верхнее меню. Не знаю, куда идти дальше. Любая помощь была бы потрясающей

Спасибо :)

P. S. Я бы рад пояснить, если это необходимо.

Sub fzCopyPaste(iItems As Integer)
On Error Resume Next
CommandBars("Custom").Delete
Set PopBar = CommandBars.Add(Name:="Custom", Position:=msoBarPopup, MenuBar:=False, Temporary:=True)

' Add top_menu on Main Popbar: This прекрасно работает

Set top_menu = PopBar.Controls.Add(Type:=msoControlButton)
With top_menu
    '.FaceId =
    .Caption = "&Some Commands"
End With

Необходимо вставить нижеприведенное подменю(ы) в верхнее меню Но ничего не появляется : не работает

Select Case iItems
Case 1  ' Copy and Paste
    Set copy_button = top_menu.Controls.Add(Type:=msoControlButton)
    With copy_button
        .FaceId = 19
        .Caption = "&Copy"
        .Tag = "tCopy"
        .OnAction = "fzCopyOne(true)"
    End With

    Set paste_button = top_menu.Controls.Add(Type:=msoControlButton)
    With paste_button
        .FaceId = 22
        .Tag = "tPaste"
        .Caption = "&Paste"
        .OnAction = "fzCopyOne(true)"
    End With
Case 2 '  Paste Only
    Set paste_button = top_menu.Controls.Add(Type:=msoControlButton)
    With paste_button
        .FaceId = 22
        .Tag = "tPaste"
        .Caption = "&Paste"
        .OnAction = "fzCopyOne(true)"
    End With
End Select

'Extra top menue(s) ниже здесь : эта работа отлично

    Set paste_button = PopBar.Controls.Add(Type:=msoControlButton)
    With paste_button
        .FaceId = 22
        .Tag = "tPaste"
        .Caption = "Main POP BAR 2"
        .OnAction = "fzCopyOne(true)"
    End With


PopBar.ShowPopup

CommandBars("Custom").Delete
End Sub
1 5

1 ответ:

Вы устанавливаете Copy_Button равным msoControlButton. Если вам нужна кнопка, это правильно. Однако вам нужно меню, поэтому вы должны установить его на msoControlPopup. Попробуйте что-нибудь вроде этого:

Set Top_Menu = PopBar.Controls.Add(Type:=msoControlPopup)
With Top_Menu 
    .Caption = "&Some Commands"
    Set MySubMenu = .Controls.Add(Type:=msoControlPopup, before:=1, temporary:=True)
    Select Case iItems
        Case 1
            With MySubMenu
                .Caption = "Submenu Commands"
                With .Controls.Add(Type:=msoControlButton, before:=1, temporary:=True)
                    .FaceId = 19
                    .Caption = "&Copy"
                    .Tag = "tCopy"
                    .OnAction = "fzCopyOne(true)"
                End With

                With .Controls.Add(Type:=msoControlButton, before:=2, temporary:=True)
                    .FaceId = 22
                    .Tag = "tPaste"
                    .Caption = "&Paste"
                    .OnAction = "fzCopyOne(true)"
                End With
            End With
        Case 2
            'etc
    End Select
End With

Я удалил раздел "Top_Menu" (первые 3 строки) с нижеприведенным; он добавлял дополнительную кнопку, а затем нужное меню.

Set MySubMenu = PopBar.Controls.Add(Type:=msoControlPopup, before:=1, temporary:=True)
With MySubMenu
    .Caption = "&Some Commands"