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
-> 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...
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 :-)
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.
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 :
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?
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()".
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?
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
Synes godt om
Ny brugerNybegynder
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.