Infoga egna menyalternativ i arbetsbladmenyraden

 

Här demonstreras lösningar för att infoga ett eget menyalternativ i arbetsbladmenyraden. Istället för att använda sig av namn används indexnummer för verktygsfältet och ID-nummer för menyalternativen.

För att skapa förteckning över index- och ID-nummer se:



I det första exemplet nedan infogas ett menyalternativ - Datakonvertering - i menyn Data.

Option Explicit

 Sub Skapa_Eget_Menyalternativ1()

   '© 2002 Alla rättigheter XL-Dennis

   Dim cbArbetsblad As CommandBar

   Dim bcData As CommandBarControl

   Dim bcDataKonvertering As CommandBarControl

   Dim stKonvert As String

 

   'Arbetsbladmenyraden har indexnummer 1

   Set cbArbetsblad = Application.CommandBars(1)

   'Menyalternativet Data har ID-nummer 30011

   Set bcData = cbArbetsblad.FindControl(ID:=30011)

   stKonvert = "Datakonvertering"

 

   On Error Resume Next

   cbArbetsblad.FindControl(ID:=30011).Controls(stKonvert).Delete

   On Error GoTo 0

 

   'Det nya menyalternativet placeras före det nuvarande menyalternativet i Data-menyn.

   Set bcDataKonvertering = _

         bcData.Controls.Add(Type:=msoControlButton, Before:=4)

 

   With bcDataKonvertering

      .BeginGroup = True

      .Caption = "D&atakonvertering"

      .FaceId = 560

      .OnAction = "Data_Konvertering"

      'Tag-egenskapen används vid borttag av menyalternativet.

      .Tag = "Konvertering"

   End With

 End Sub

 

Sub TaBort_Eget_Menyalternativ1()

   '© 2002 Alla rättigheter XL-Dennis

   ' Tar bort kontrollen oavsett dess placering i menyn

   Dim bcDataKonvertering As CommandBarControl


  
On Error Resume Next

   'Här söks kontroller mha Tag-egenskapen.

   Set bcDataKonvertering = Application.CommandBars.FindControl(Tag:="Konvertering")

   bcDataKonvertering.Delete

End Sub


Alternativt kan vi använda oss av följande procedur för borttag.
'Dock är den inte lika "användar-säker" jämfört med proceduren ovan
'då den inte hittar kontrollen om användarna skulle ändra namnet.

Sub TaBort_Eget_Menyalternativ2()

   '© 2002 Alla rättigheter XL-Dennis

   On Error Resume Next

   Application.CommandBars(1).FindControl(ID:=30011). _
                              Controls(
"D&atakonvertering").Delete

End Sub

 

I det andra exemplet skapas menyalternativet Datakonvertering i undermenyn Hämta externa data. Lösningen är mer komplicerad än ovanstående samtidigt som den är avsevärt mindre i omfång.

Sub Skapa_Eget_Menyalternativ2()

   '© 2002 Alla rättigheter XL-Dennis

   Dim cbNy As CommandBar

   Dim bcHamtaData As CommandBarControl

   Dim bcKonvert As CommandBarControl

 

   'Menyalternativet Data | Hämta extern data... har ID-nummer 30101.
  
'I XL 2002 heter alternativet Data | Importera externa data

   Set bcHamtaData = Application.CommandBars. _
                                                FindControl(
Type:=msoControlPopup, ID:=30101)

   Set cbNy = bcHamtaData.CommandBar

   Set bcKonvert = cbNy.Controls.Add

 

   With bcKonvert

      .BeginGroup = True

      .Caption = "D&atakonvertering"

      .FaceId = 560

      .OnAction = "Data_Konvertering"

      'Tag-egenskapen används vid borttag av menyalternativet.

      .Tag = "Konvertering"

   End With

End Sub