Avatar billede gammer Nybegynder
05. august 2006 - 08:22 Der er 8 kommentarer og
1 løsning

Nyt menupunkt med flere underpunkter

Jeg har et regneark, som jeg gerne vil have et nyt menupunkt knyttet til. Til menupunktet vil der være flere underpunkter.

Løsningen har jeg til dels fundet i svaret på dette spørgsmål på Eksperten:

http://www.eksperten.dk/spm/478009

Makroen her opretter kun et menupunkt, og jeg kan ikke lige se hvordan jeg kommer videre med at få oprettet flere menupunkter.

Er der nogen der lige kan se hvordan jeg får oprettet flere menupunkter med denne makro (eller en anden makro)
Avatar billede brynil Nybegynder
05. august 2006 - 10:23 #1
Yderligere menuer (overordnede):

' 2det menupunkt
    Set MenuItem = NewMenu.Controls.Add(Type:=msoControlPopup)
        With MenuItem
            .Caption = "&menu2..."
            .BeginGroup = True
        End With


Du skulle kunne indsætte undermenuer på denne måde:

' 1te undermenu til 2det menupunkt
    Set Submenuitem = MenuItem.Controls.Add(Type:=msoControlButton)
        With Submenuitem
            .Caption = "&submenu1"
            .FaceId = 420
            .OnAction = "makronavn"
        End With

'2det undermenu til 2det menupunkt
    Set Submenuitem = MenuItem.Controls.Add(Type:=msoControlButton)
        With Submenuitem
            .Caption = "&submenu2"
            .FaceId = 422
            .OnAction = "makronavn"
        End With

Det er fra noget jeg tidligere har rodet med så du skal self. tilpasse det, men funktionaliteten burde være der.
Avatar billede brynil Nybegynder
05. august 2006 - 10:26 #2
Husk dim'erne:

Dim NewMenu As CommandBarPopup
Dim MenuItem As CommandBarControl
Dim Submenuitem As CommandBarButton
Avatar billede brynil Nybegynder
05. august 2006 - 10:57 #3
Her er en fuld version:

Sub CreateMenu2()
Dim HelpMenu As CommandBarControl
Dim NewMenu As CommandBarPopup
Dim MenuItem As CommandBarControl
Dim Submenuitem As CommandBarButton

' Slet evt. eksisterende menu
    Call DeleteMenu2
' Find Hjælp/Help Menu
    Set HelpMenu = CommandBars(1).FindControl(Id:=30010)
        If HelpMenu Is Nothing Then
' Hvis ingen Hjælp Menu, så placer ny sidst
            Set NewMenu = CommandBars(1).Controls.Add(Type:=msoControlPopup, temporary:=True)
        Else
' Placér nyt menu før Hjælp
            Set NewMenu = CommandBars(1).Controls.Add(Type:=msoControlPopup, Before:=HelpMenu.Index, temporary:=True)
        End If
' Overskrift på ny menu
    NewMenu.Caption = "&Private"

' 1te menupunkt
    Set MenuItem = NewMenu.Controls.Add(Type:=msoControlButton)
        With MenuItem
            .Caption = "menu1-1"
            .FaceId = 162
            .OnAction = "makronavn"
        End With

'MENU-GRUPPE 2 START
' 2det menupunkt
    Set MenuItem = NewMenu.Controls.Add(Type:=msoControlPopup)
        With MenuItem
            .Caption = "menu2..."
            .BeginGroup = True
        End With

' 1te undermenu til 2det menupunkt
    Set Submenuitem = MenuItem.Controls.Add(Type:=msoControlButton)
        With Submenuitem
            .Caption = "submenu2-1"
            .FaceId = 420
            .OnAction = "makronavn"
        End With

'2det undermenu til 2det menupunkt
    Set Submenuitem = MenuItem.Controls.Add(Type:=msoControlButton)
        With Submenuitem
            .Caption = "submenu2-2"
            .FaceId = 422
            .OnAction = "makronavn"
        End With

'3die undermenu til 2det menupunkt
    Set Submenuitem = MenuItem.Controls.Add(Type:=msoControlButton)
        With Submenuitem
            .Caption = "submenu2-3"
            .FaceId = 422
            .OnAction = "makronavn"
        End With
'MENU-GRUPPE 2 SLUT


'MENU-GRUPPE 3 START
' 3die menupunkt
    Set MenuItem = NewMenu.Controls.Add(Type:=msoControlPopup)
        With MenuItem
            .Caption = "menu3..."
            .BeginGroup = True
        End With

' 1te undermenu til 3die menupunkt
    Set Submenuitem = MenuItem.Controls.Add(Type:=msoControlButton)
        With Submenuitem
            .Caption = "submenu3-1"
            .FaceId = 420
            .OnAction = "makronavn"
        End With

'2det undermenu til 3die menupunkt
    Set Submenuitem = MenuItem.Controls.Add(Type:=msoControlButton)
        With Submenuitem
            .Caption = "submenu3-2"
            .FaceId = 422
            .OnAction = "makronavn"
        End With

'3die undermenu til 3die menupunkt
    Set Submenuitem = MenuItem.Controls.Add(Type:=msoControlButton)
        With Submenuitem
            .Caption = "submenu3-3"
            .FaceId = 422
            .OnAction = "makronavn"
        End With

'4de undermenu til 3die menupunkt
    Set Submenuitem = MenuItem.Controls.Add(Type:=msoControlButton)
        With Submenuitem
            .Caption = "submenu3-4"
            .FaceId = 422
            .OnAction = "makronavn"
        End With

'5te undermenu til 3die menupunkt
    Set Submenuitem = MenuItem.Controls.Add(Type:=msoControlButton)
        With Submenuitem
            .Caption = "submenu3-5"
            .FaceId = 422
            .OnAction = "makronavn"
        End With

'6te undermenu til 3die menupunkt
    Set Submenuitem = MenuItem.Controls.Add(Type:=msoControlButton)
        With Submenuitem
            .Caption = "submenu3-6"
            .FaceId = 422
            .OnAction = "makronavn"
        End With

'MENU-GRUPPE 3 SLUT

' 4de menupunkt
    Set MenuItem = NewMenu.Controls.Add(Type:=msoControlButton)
        With MenuItem
            .Caption = "menu4"
            .FaceId = 590
            .OnAction = "makronavn"
        End With

End Sub

Sub DeleteMenu2()
    On Error Resume Next
    CommandBars(1).Controls("Private").Delete
End Sub
Avatar billede gammer Nybegynder
05. august 2006 - 14:08 #4
Hej Brynil

Jeg har prøvet din makro, men den giver mig en "run-time error '91' - Object variable or with block not set"

Ved debug er der intet linienr.

Jeg har indsat makroen i "ThisWorkBook".
Avatar billede gammer Nybegynder
05. august 2006 - 14:26 #5
Hej Brynil

Jeg har fået den til at virke. Jeg satte den i et module - hvorefter alt fungerer perfekt.

Så pointene er dine hvis du lige kommer med et svar!!
Avatar billede brynil Nybegynder
05. august 2006 - 15:06 #6
Nåh ja. For at menupunktet kun er til rådighed i den specifikke workbook, så tilpas koden i ThisWorkbook så det ser nogenlunde således ud:

Private Sub Workbook_Open()
    CreateMenu2
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  On Error Resume Next
  Application.CommandBars(1).Controls("Private").Delete
End Sub

Hold tungen lige i munden når du anvender index'es og menunavne så du ikke kommer til at slette den forkerte.
Avatar billede brynil Nybegynder
05. august 2006 - 15:10 #7
Lidt mere korrekt. Menupunktet vil være synligt for alle workbooks, så længe du har den workbook åben som menukoden køres fra.
Avatar billede gammer Nybegynder
05. august 2006 - 19:47 #8
Takker mange gange for hjælpen.

Jeg vil prøve mig lidt frem, stille og roligt, for at se hvordan jeg kan få det til at fungere optimalt.
Avatar billede brynil Nybegynder
05. august 2006 - 19:53 #9
Go' idé. Tak for point! :))
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