Предайте аргументи на макроси от бутони и менюта, използвайки VBA в Microsoft Excel

Anonim

Примерът по -долу показва как можете да създадете бутони/менюта на CommandBar, които предават един или повече аргументи на макрос.
примерът също така показва как можете да добавите нов елемент към контекстното меню Cell.

Sub AddCommandToCellShortcutMenu () Dim i As Integer, ctrl As CommandBarButton DeleteAllCustomControls „изтрийте контролите, ако те вече съществуват“, създайте новите контроли с Application.CommandBars (25) „контекстното меню на клетката“ добавете обикновен бутон на командната лента Set ctrl = .Controls.Add (msoControlButton,,,, True) С ctrl .BeginGroup = True .Caption = "Ново меню1". FaceId = 71 .State = msoButtonUp .Style = msoButtonIconAndCaption .Tag = "TESTTAG1" .OnAction = "a MyMacroNa бутон, който предава един низ аргумент Задайте ctrl = .Controls.Add (msoControlButton,,,, True) С ctrl .BeginGroup = False .Caption = "Ново меню2". FaceId = 72 .Style = msoButtonIconAndCaption .Tag = "TESTTAG2" .OnAction = "'MyMacroName2" "Ново меню2" "" "Край с" добавете бутон, който преминава, предава един низ аргумент Задайте ctrl = .Controls.Add (msoControlButton,,,, True) С ctrl .BeginGroup = False .Caption = "Нов Меню 3 ". FaceId = 73. Стил = msoButtonIconAndCaption .Tag =" TESTTAG3 ". = "'MyMacroName2" "" & .Caption & "" "" "Край с" добавете бутон, който предава два аргумента, низ и цяло число Задайте ctrl = .Controls.Add (msoControlButton,,,, True) С ctrl. BeginGroup = False .Caption = "Ново меню4". FaceId = 74 .Style = msoButtonIconAndCaption .Tag = "TESTTAG4" .OnAction = "'MyMacroName3" "" &. = Нищо End Sub Sub DeleteAllCustomControls () 'изтрийте контролите, ако те вече съществуват Dim i As Integer For i = 1 To 4 DeleteCustomCommandBarControl "TESTTAG" & i Next i End Sub Private Sub DeleteCustomCommandBarControl (CustomControlTag As String)' изтрива ВСИЧКИ CommandBar контроли с Етикет = CustomControlTag при грешка възобновяване След това направете Application.CommandBars.FindControl (,, CustomControlTag, False). Изтриване на цикъл до Application.CommandBars.FindControl (,, _ CustomControlTag, False) Няма нищо при грешка GoTo 0 End Sub 'макроси, използвани от бутоните на командната лента Sub MyMacroName1 () MsgBox "Часът е" & Форматиране (Време, "ч h: mm: ss ") End Sub Sub MyMacroName2 (Незадължително MsgBoxCaption As String =" UNKNOWN ") MsgBox" Времето е "& Format (Time," hh: mm: ss "),, _" Този макрос е стартиран от " & MsgBoxCaption End Sub Sub MyMacroName3 (MsgBoxCaption As String, DisplayValue As Integer) MsgBox "Времето е" & Format (Time, "hh: mm: ss"),, _ MsgBoxCaption & "" & DisplayValue End Sub