Avatar billede martin_moth Mester
13. august 2009 - 12:13 Der er 5 kommentarer og
1 løsning

VBA Excel Addin: Placering af menupunkt lige før "Help"

Laver et Add-in til Excel, der lægger et ekstra menupunkt op i Excels menubar, som det næstsidste menupunkt, lige før Help

Dim cbcSubMenu As CommandBarControl

Set cbMainMenuBar = Application.CommandBars("Worksheet Menu Bar")
  iHelpMenu = cbMainMenuBar.Controls("Help").Index '<---PROBLEM
  Set cbcCutomMenu = cbMainMenuBar.Controls.Add(Type:=msoControlPopup, Before:=iHelpMenu)
  cbcCutomMenu.Caption = "MitMenupunkt"
  With cbcCutomMenu.Controls.Add(Type:=msoControlButton)
    .Caption = "Menu 1"
    .OnAction = "MyMacro1"
  End With

Men da jeg søger på strengen "Help", vil det jo ikke virke ved en dansk, spansk osv. version af Excel.
Kan man ikke tælle menupunkter i Excel (det kan vel variere fra version til version), og så indsætte min menu som det næstsidste punkt?

Jo, det kan man med garanti. Men hvordan?
Avatar billede tjp Mester
13. august 2009 - 13:29 #1
cbMainMenuBar.Controls.Count giver antallet...
Avatar billede Lene Fredborg Ekspert
13. august 2009 - 14:13 #2
Men du kan ikke være sikker på, at Help er den sidste menu. Hvis brugeren f.eks. har installeret Adobe Acrobat, vil der være tilføjet en ekstra menu efter Help. Hvis der er andre add-ins, kan der være tilføjet andre menuer.

Du burde kunne udnytte, at de indbyggede controls har et ID, som du kan finde på følgende måde:

CommandBars("Worksheet Menu Bar").Controls("Help").Id

Den viser, at ID på Help-menuen er 30010

Du kan så udnytte ID i stedet for navnet:

Dim iHelpMenu As Long
iHelpMenu  = CommandBars.FindControl(ID:=30010).Index
Avatar billede martin_moth Mester
15. august 2009 - 12:22 #3
Yep, ID'et er en løsning.

Hvis jeg nu vil sætte min menu ind som fx. nr 2 (lige efter File), hvordan indsætter man så et specifikt sted?

Altså noge ti retning af '
Set cbcCutomMenu = cbMainMenuBar.Controls.Add(Type:=msoControlPopup, INDEX = 2)

Men det hedder næppe Index = 2...
Avatar billede Lene Fredborg Ekspert
16. august 2009 - 11:52 #4
Brug:

Set cbcSubMenu = cbMainMenuBar.Controls.Add(Type:=msoControlPopup, Before:=2)

Så vil menuen komme ind som en ny nr. 2. I dette tilfælde kan du jo nok være sikker på, at der findes mindst 2 menuer i forvejen. Hvis du ikke kunne det, kunne der komme en fejl. Der kunne testes for antal controls først, hvis det var nødvendigt:

If cbMainMenuBar.Controls.count >= 2 then
    'Lav din menu
Else
    'Besked til brugeren om, at det ikke kan lade sig gøre eller andet - f.eks. en anden placering
End if
Avatar billede martin_moth Mester
17. august 2009 - 22:37 #5
smid svar :-)
Avatar billede Lene Fredborg Ekspert
17. august 2009 - 23:03 #6
Kommer her. Går ud fra, at det betyder, at du kan få det til at virke...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester