Измените имя родительской кнопки из контекстного меню - PullRequest
0 голосов
/ 05 мая 2020

Я создал настраиваемое контекстное меню при щелчке правой кнопкой мыши

Я хочу обновить заголовок родительской кнопки, когда я щелкнул любой элемент подменю

Option Explicit

Public Const Mname As String = "MyPopUpMenu"

Sub PopUpMenu()

    ' Create the custom right click menu.
    Call RClickMenu

    ' Display the popup menu.
    On Error Resume Next
    Application.CommandBars(Mname).ShowPopup
    On Error GoTo 0
End Sub

Настраиваемое меню при щелчке правой кнопкой мыши:

Sub RClickMenu()

Dim MenuItem As CommandBarPopup
Dim SectionType As String
 = "Sections"

' Add the popup menu.
With Application.CommandBars.Add(Name:=Mname, Position:=msoBarPopup, _
     MenuBar:=False, Temporary:=True)

    Set MenuItem = .Controls.Add(Type:=msoControlPopup)
    With MenuItem
        .caption = "File Type"

        With .Controls.Add(Type:=msoControlButton)
            .caption = "File 1"
            .OnAction = "setCaption"
            .Parameter = "file1"
        End With

        With .Controls.Add(Type:=msoControlButton)
            .caption = "File 2"
            .OnAction = "setCaption"
            .Parameter = "file2"
        End With

    End With

End With
End Sub

Событие нажатия мыши при щелчке правой кнопкой мыши:

Public Sub btnFindSections_MouseDown(ByVal button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If button = 1 Then
        ActiveWorkbook.FollowHyperlink "https://www.file.com"
    ElseIf button = 2 Then
        PopUpMenu
    End If
End Sub

Установить метод подписи:

Sub setCaption()
    Select Case CommandBars.ActionControl.Parameter
    Case "Sections"
        ActiveSheet.Shapes("CommandButton1").Name = "Sections" // Error saying item not found
    End Select
End Sub

Внутри setCaption(), мне нужно найти родительскую кнопку и измените его заголовок с Find files на Find Sections

1 Ответ

1 голос
/ 05 мая 2020

Попробуйте заменить (в случае кнопки ActiveX):

ActiveSheet.OLEObjects("CommandButton1").Object.Caption = "Lists"

на

ActiveSheet.OLEObjects("CommandButton1").Name = "Lists"

В случае кнопки 'Form' замените ту же строку на:

ActiveSheet.Buttons("CommandButton1").Caption = "Lists"

В приведенных выше примерах код использует кнопку Name, как вы и просили.

Если вам нужно найти кнопку ActiveX, используя ее Caption, вы должны использовать код следующей итерации:

Sub TestButtonCaptionSearch()
  Dim but As OLEObject
    For Each but In ActiveSheet.OLEObjects
        If but.Object.Caption = "CommandButton1" Then
            but.Object.Caption = "Lists": Exit For
        End If
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...