Avatar billede caschmidt Nybegynder
20. marts 2006 - 21:32 Der er 4 kommentarer og
2 løsninger

Oprette min egen menu via VBA

Jeg kæmper for øjeblikket med at få (automatisk) oprettet en brugerdefineret menu i Excel.  - og få lukket menuen igen, når det aktuelle regneark lukkes.
Se www.eksperten.dk/spm/695614

Nu er jeg så begyndt at bøvle med at få dette til at fungere via VBA.

Jeg fandt nogle programstumper, som i faktisk virker meget fint - men når jeg kopierer stumpen ind i mit eget VBA-projekt, så vil den ikke mere :-(

Udgangspunktet ser således ud:
Sub Kapitel17()
    Dim MenuLinje As CommandBar
    Dim TimeMenu As Object
    Dim Element As Object

    Set MenuLinje = CommandBars.Add(Name:="Time/&Sag", Position:=msoBarTop, MenuBar:=True, Temporary:=True)
        MenuLinje.Controls.Add Type:=msoControlPopup, ID:=30002, Before:=1

I min version ser det således ud:
Sub Auto_Open()
    Dim MenuLinje As CommandBar
    Dim TimeMenu As Object
    Dim Element As Object

    Set MenuLinje = CommandBars.Add(Name:="Time/&Sag", Position:=msoBarTop, MenuBar:=True, Temporary:=True)
        MenuLinje.Controls.Add Type:=msoControlPopup, ID:=30002, Before:=1

Når programmet når til første linie (!) får jeg denne fejlmelding:
"Compile error: User-defined type not defined"

Hvad skal det forestille?
Hvorfor virker det ikke?
Avatar billede kabbak Professor
20. marts 2006 - 22:04 #1
din kode virkede ikke i mint Excel2000, den kunne ikke lide: , Temporary:=True)


Public Sub LavBar()
    Dim MenuLinje As CommandBar
    Dim TimeMenu As Object
    Dim Element As Object
    Set MenuLinje = CommandBars.Add(Name:="Time/&Sag", Position:=msoBarTop, MenuBar:=True)
    MenuLinje.Visible = True
    Set TimeMenu = CommandBars("Time/&Sag").Controls.Add(Type:=msoControlButton)
   
    With TimeMenu
    .BeginGroup = True
  ' .FaceId = 420
    .Caption = "(Lav menu)" ' titel på knappen
    .Style = msoButtonCaption
    .OnAction = "DinMakro" ' kalder den makro der er navngivet her
End With
End Sub

Public Sub Fjernbar()
Application.CommandBars("Time/&Sag").Delete
End Sub
Avatar billede kabbak Professor
20. marts 2006 - 22:08 #2
Hvis du så smider disse 2 i ThisWorkbook modulet, så kører det automatisk.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Fjernbar
End Sub

Private Sub Workbook_Open()
LavBar
End Sub
Avatar billede caschmidt Nybegynder
21. marts 2006 - 07:57 #3
Desværre er dit svar ikke svar på mit spørgsmål, kabbak ;-(
Når jeg kører min kode får jeg fejlen: "Compile error: User-defined type not defined" i kodens første linie = den, der definerer "MenuLinje As CommandBar"

Hvorfor virker det ikke i mit program?
Hvis jeg kopierer kabbak's kode ind i en "frisk" projektmappe, så virker det fint ???
Avatar billede hubertus Seniormester
21. marts 2006 - 10:53 #4
Hej caschmidt - jeg kan fint få koden til at virker i en execl2003.

kabbak - kan du udvide din kode til også at have undermenuer?
Avatar billede caschmidt Nybegynder
21. marts 2006 - 12:57 #5
Jeg forstår det stadig ikke.  Men nu fik jeg det til at virke!
Jeg kopierede alle mine egne - og nogle af kabbak's - kodelinier ind i en ny projektmappe, som ikke indeholdt makroer overhovedet.

Så kører det bare :-)
Derefter kopierede jeg alle regnearkene fra min oprindelige projektmappe ind i denne nye og slettede den gamle.  Det var det.
En tur over åen efter vand.

Konklusion:  Jeg fik løst mit problem, men fik ikke svar på mit spørgsmål.
Dog kunne jeg godt bruge nogle af kabbak's tips omkring Workbook_BeforeClose.
Hvis kabbak vil give svar, vil jeg dele point med ham/hende (?)
Avatar billede kabbak Professor
21. marts 2006 - 13:25 #6
et svar ;-))
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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