Avatar billede jensen363 Forsker
23. marts 2006 - 09:00 Der er 29 kommentarer og
1 løsning

Egen menubar med submenuer

Er det muligt at lave sin egen menubar med submenuer i flere niveauer ... og i givet fald hvordan ???
Avatar billede gladhund Nybegynder
23. marts 2006 - 11:18 #1
Hej der,

Du kan bruge denne kode til workbook_open() - den viser en menu helt til venstre, samt to underliggende menupunkter:

------

Sub VisHovedmenu()
VisHovedmenu
End sub

------

Indsæt derefter følgende kode i et modul:

------

Sub VisHovedmenu()

Dim Hovedmenu As Object
Dim Undermenu1 As Object
Dim Undermenu2 As Object

Set HovedMenu = CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup, Temporary:=True)
Hovedmenu.Caption = "Dinmenu"

Set Undermenu1 = Hovedmenu.Controls.Add(Type:=msoControlButton, ID:=1)
Undermenu1.Caption = "Minundermenu1"
Undermenu1.Style = msoButtonCaption
Undermenu1.OnAction = "NavnPåMakroDerSkalKøres"

Set Undermenu2 = Hovedmenu.Controls.Add(Type:=msoControlButton, ID:=1)
Undermenu2.Caption = "Minundermenu2"
Undermenu2.Style = msoButtonCaption
Undermenu2.OnAction = "NavnPåMakroDerSkalKøres"

End Sub

------

Kør så denne kode ved workbook_close() - så menuen kun vises i den aktuelle workbook:

Sub SkjulHovedmenu()

Hovedmenu.Visible = False
HovedmenuElement.Visible = False

End Sub

------

Det er ikke en menubar, men en menu ligesom "Filer" og "Funktioner". Håber det kan bruges.
Avatar billede jensen363 Forsker
23. marts 2006 - 12:04 #2
Det er ikke lige det jeg søger ... jeg har behov for at arbejde med menupunkterne lidt ligesom i TreeView ... dvs. at der i Undermenu1 er en række menupunkter og i Untermenu2 er et tilsvarende antal ... altså en hierarkisk træstruktur
Avatar billede gladhund Nybegynder
23. marts 2006 - 12:38 #3
Det kan du også sagtens. Du skal bare indsætte undermenuer til undermenuerne på samme måde. De kan laves i flere niveauer.
Avatar billede jensen363 Forsker
23. marts 2006 - 12:41 #4
Jeg forsøgte, men kunne ikke lige få den korrekte syntax ... kan du give et eksempel ????
Avatar billede gladhund Nybegynder
23. marts 2006 - 12:48 #5
hehe - det kan du tro, men jeg skal bruge min bog :*)

Når jeg kommer hjem i aften, forsøger jeg at give et eksempel på syntaksen.
Avatar billede jensen363 Forsker
23. marts 2006 - 12:48 #6
Takker :o)
Avatar billede hubertus Seniormester
23. marts 2006 - 17:48 #7
hej kabak - mangler dur ikke noget i sub skjulhovedmenu(). når jeg lukker arket forsvinder menuen ikke.
Avatar billede kabbak Professor
23. marts 2006 - 19:36 #8
Hubertus > nu er det jo ikke lige mig, der har skrevet i denne tråd, men gladhund ;-))
Avatar billede hubertus Seniormester
23. marts 2006 - 21:19 #9
sorry - jeg havde det fra en anden tråd, hvor du skrev om det samme :-)
Avatar billede hubertus Seniormester
23. marts 2006 - 21:20 #10
sprøgsmålet er derfor givet videre til gladhund -
Avatar billede gladhund Nybegynder
23. marts 2006 - 21:42 #11
-> Hubertus: Hvis du kører makroen Skjulhovedmenu i workbook_close() , så skulle den meget gerne fjerne menuen, så den ikke vises når du åbner en anden workbook. Det virker i hvert fald hos mig.

-> jensen363: Jeg vender lige tilbage med underundermenuerne - det er ikke så nemt at finde som jeg troede...
Avatar billede gladhund Nybegynder
23. marts 2006 - 21:46 #12
-> Hubertus: Min fejl, der skal selvfølgelig stå:

Sub SkjulHovedmenu()

Hovedmenu.Visible = False
Undermenu1.Visible = False
Undermenu2.Visible = False

End Sub

Sorry :)
Avatar billede gladhund Nybegynder
23. marts 2006 - 23:09 #13
Så lykkedes det endelig! Det er tungt, når man skal lære, men fedt når det lykkes :-)

Her er koden til hovedmodulet:

-----

Sub VisMenu()

Dim Menu As CommandBarPopup
Dim Undermenu As CommandBarPopup


Set Menu = CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup, Temporary:=True)
Menu.Caption = "Menu"

With Menu.Controls.Add(Type:=msoControlButton)
                .Caption = "Menuvalg1"
                .OnAction = "MinMakro1"
               
End With

Set Undermenu = Menu.Controls.Add(Type:=msoControlPopup, Temporary:=True)
Undermenu.Caption = "Undermenu"

With Undermenu.Controls.Add(Type:=msoControlButton)
                .Caption = "Undermenuvalg1"
                .OnAction = "MinMakro2"

End With

End Sub

----

Koden opretter en menuknap "Menu" på linje med "Filer", "Funktioner" osv., med ét menuvalg "Menuvalg1". Desuden oprettes en undermenu "Undermenu", der leder videre til et nyt menuvalg "Undermenuvalg1". Så burde syntaksen være til at udbygge :-)

Håber du kan bruge det.
Avatar billede jensen363 Forsker
24. marts 2006 - 10:08 #14
Bortset fra, at jeg ikke kan aktivere mine makroer i menuen, virker det ... hvad er der galt ???
Avatar billede gladhund Nybegynder
24. marts 2006 - 11:03 #15
Har lige prøvet selv i en helt ny workbook, med præcis ovenstående kode. Jeg optog 2 makroer, og kaldte dem hhv. "MinMakro1" og "MinMakro2", og de blev begge kørt, da jeg trykkede i menuen. Prøv at vis mig din kode, for jeg tror ikke det er min kode, der er fejl i.
Avatar billede jensen363 Forsker
24. marts 2006 - 11:18 #16
Jeg benytter en TreeView funktion i dag ... denne fungerer uden problemer, men programkoden er ret besværlig at vedligeholde, da hierarkiet opdateres jævnligt.

Menufunktionen ser umiddelbart lettere ud idet parrent/child er nemmere at rette

En makro ( som der p.t. er 78 af ) ser typisk således ud :

Sub R()

Application.ScreenUpdating = False
  Sheets("MellemRegning").Visible = True
    ActiveSheet.Unprotect  ' Fjern beskyttelse

    Sheets("DataVisning").Select
      Range("E2").Select
        ActiveCell.FormulaR1C1 = "SAMLET RESULTAT"

    Sheets("MellemRegning").Select
    Range("C1:O3").Select
    Selection.Copy
    Sheets("DataVisning").Select
    Range("B7").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Sheets("MellemRegning").Select
    Range("C4:O6").Select
    Selection.Copy
    Sheets("DataVisning").Select
    Range("B12").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Sheets("DataVisning").Select
        DataValg
    Range("C2:C2").Select
   
Sheets("MellemRegning").Visible = False
  ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Application.ScreenUpdating = True

End Sub
Avatar billede gladhund Nybegynder
24. marts 2006 - 13:00 #17
Du har tabt mig fuldstændig. Den makro har intet med menuer at gøre?
Avatar billede gladhund Nybegynder
24. marts 2006 - 13:48 #18
Du må nok forklare dig lidt bedre, eller spørge nogen af de andre.
Avatar billede hubertus Seniormester
25. marts 2006 - 09:41 #19
Hej gladhund - din menustruktur virker perfekt - dog forsvinder menuen stadig ikke, når arket lukkes - kan ikke greje den - kan du?
Avatar billede gladhund Nybegynder
25. marts 2006 - 15:52 #20
Hej hubertus. Ok, så lad os lige få grejet den her!

Først, hvilken en bruger du, den første eller den nye jeg har lavet?
Avatar billede gladhund Nybegynder
25. marts 2006 - 15:53 #21
Den første er noget værre juks, men den nye er go', så den er nok den du skal bruge ;-)
Avatar billede hubertus Seniormester
25. marts 2006 - 17:32 #22
Hej igen - jeg har prøvet dem begge, men lad os bare tage udgangspunkt i den sidste.
Avatar billede gladhund Nybegynder
25. marts 2006 - 18:46 #23
OK. Jeg har sat makroen ind i en helt ny workbook, og kører den så fra "This workbook" med "Sub workbook_open()". Så loader den menuen. Når jeg så lukker denne workbook, og åbner en anden, så findes menuen ikke mere. Hvis jeg åbner en anden workbook, uden at lukke den med menuen først, så er menuen også i den anden. Virker det også sådan for dig, og har du brug for, at menuen ikke kommer frem i efterfølgende workbooks, hvis du har den med menukoden åben?
Avatar billede gladhund Nybegynder
25. marts 2006 - 18:51 #24
Argumentet "Temporary" gør, at de to menupunkter (CommmandBarPopups) slettes igen, når workbook'en lukkes. Derfor er det mærkeligt, hvis det ikke sker hos dig. Dermed behøver du altså ikke køre en kode for "workbook_close()".
Avatar billede gladhund Nybegynder
25. marts 2006 - 18:52 #25
Jeg kan evt. sende workbook'en til dig.
Avatar billede hubertus Seniormester
25. marts 2006 - 19:37 #26
hej igen - hos mig åbner den også fint, men når jeg lukker den workbook hvor koden er i er menuen der stadig. lukker jeg excel hel, så er menuen væk, når jeg åbner excel igen. Egentlig vil jeg hellere sende min workbook til dig, hvis det er ok, da jeg gerne vil finde fejlen. Vil det være ok?
Avatar billede gladhund Nybegynder
25. marts 2006 - 20:04 #27
Du sender bare: rasmus snabela 2902 dot dk.
Avatar billede hubertus Seniormester
26. marts 2006 - 08:18 #28
Den er afsendt
Avatar billede gladhund Nybegynder
26. marts 2006 - 17:55 #29
Her er et godt link til Microsoft support, der forklarer hvordan man håndterer menuer med VBA: http://support.microsoft.com/default.aspx?scid=kb;en-us;166755
Avatar billede hubertus Seniormester
26. marts 2006 - 18:09 #30
Tak for svaret (pr. mail), jeg opretter lige et spørgsmål, så du kan få dine point. jeg vedhæfter lige koden, så andre også kan få glæde af det.

Koden placeres i et modul:

Sub VisMenu()

Dim Menu As CommandBarPopup
Dim Undermenu1 As CommandBarPopup
Dim Undermenu2 As CommandBarPopup

Set Menu = CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup, Temporary:=True)
Menu.Caption = "Menu"

With Menu.Controls.Add(Type:=msoControlButton)
                .Caption = "Menuvalg1"
                .OnAction = "MinMakro1"
End With

With Menu.Controls.Add(Type:=msoControlButton)
                .Caption = "Menuvalg2"
                .OnAction = "MinMakro1"
             
End With

Set Undermenu1 = Menu.Controls.Add(Type:=msoControlPopup, Temporary:=True)
Undermenu1.Caption = "Undermenu1"

With Undermenu1.Controls.Add(Type:=msoControlButton)
                .Caption = "Undermenuvalg1"
                .OnAction = "MinMakro2"
End With

With Undermenu1.Controls.Add(Type:=msoControlButton)
                .Caption = "Undermenuvalg2"
                .OnAction = "MinMakro2"
End With
               
Set Undermenu2 = Undermenu1.Controls.Add(Type:=msoControlPopup, Temporary:=True)
Undermenu2.Caption = "Undermenu2"

With Undermenu2.Controls.Add(Type:=msoControlButton)
                .Caption = "Undermenuvalg1"
                .OnAction = "MinMakro2"
               
End With

With Undermenu2.Controls.Add(Type:=msoControlButton)
                .Caption = "Undermenuvalg2"
                .OnAction = "MinMakro2"

End With

End Sub

Sub Auto_Close()
CommandBars("Worksheet menu bar").Controls("Menu").Delete
End Sub

følgende rutine i thisworkbook

Sub Workbook_Open()
VisMenu
End Sub
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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