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").DeleteEnd 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 dataSet 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