Avatar billede mira96ac Novice
10. marts 2007 - 20:03 Der er 2 kommentarer og
1 løsning

Makro til menubar

Hejsa

Hvorfor kan jeg ikke kalde min makro i nedenstående eksempel.

Jeg har placeret koden i en xla-fil og placeret den i xlstart biblioteket.

Jeg får bare en fejl der refererer til at "menu.xla!MyMacroName1 blev ikke fundet"

Her er koden:



Option Explicit


Dim NewMenuItem As CommandBarControl

Const MenuCaption = "NyMenu"
Const UnderMenuCaption = "NyUndermenu"

Public Sub NyMenu()
    Dim bMenuExists As Boolean
    Dim ctrl1 As CommandBarButton
    Dim mnuNyUndermenuLocal As CommandBarButton
    Dim MenuItem As CommandBarControl
    Dim LocalMenuItem As CommandBarControl
    Dim MenuBar As CommandBar
    Dim strPreKode As String

    Set MenuBar = Application.CommandBars.ActiveMenuBar
    bMenuExists = False

    MenuBar.Reset
   
    For Each MenuItem In MenuBar.Controls
        If MenuItem.Caption = MenuCaption Then
            bMenuExists = True
            Set LocalMenuItem = MenuItem
            Set mnuNyUndermenuLocal = MenuItem.CommandBar.Controls(UnderMenuCaption)
        End If
    Next MenuItem
   
    If Not bMenuExists Then
        Set LocalMenuItem = MenuBar.Controls.Add(Type:=msoControlPopup, Temporary:=True)
        LocalMenuItem.Move Before:=10
        LocalMenuItem.Caption = MenuCaption
        Set ctrl1 = LocalMenuItem.CommandBar.Controls.Add(Type:=msoControlButton, ID:=1, Temporary:=True)
        With ctrl1
          .Caption = UnderMenuCaption
          .Style = msoButtonCaption
          .OnAction = "MyMacroName1"
        End With
    Set NewMenuItem = LocalMenuItem
       
        If CheckTemplate Then
        NewMenuItem.Enabled = False
    End If
       
End If
   
End Sub

Public Sub SletMenu()
    If Not NewMenuItem Is Nothing Then
        On Error Resume Next
        NewMenuItem.Delete
        On Error GoTo 0
        Set NewMenuItem = Nothing
    End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    SletMenu
End Sub

Private Sub Workbook_Activate()
    NyMenu
End Sub

Private Sub Workbook_Deactivate()
    SletMenu
End Sub

Private Sub Workbook_Open()
    NyMenu
End Sub

Private Function CheckTemplate() As Boolean
    Dim bResult As Boolean
    bResult = False
    If UCase(Application.ActiveWorkbook.Name) = "TEMPLATE.XLS" Then
        bResult = True
    End If
    CheckTemplate = bResult
End Function

Public Sub TrigMenu(shtWorkSheet As Worksheet)
    Workbook_SheetActivate shtWorkSheet
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    NyMenu
End Sub
Sub MyMacroName1()
    Workbooks.Open Filename:="c:\mitark.xls"
End Sub
Avatar billede mira96ac Novice
10. marts 2007 - 22:07 #1
Jeg fandt selv denne på eksperten.dk

Option Explicit

Public MenuObject As CommandBarPopup
Public SubMenu As CommandBarPopup
Public MenuItem As Object
Public SubMenuItem As CommandBarButton
Public Const strMenuName As String = "MyMenu"
Public Const strMenuNo As String = 11
Public Const intBarsNo As Integer = 1

Sub Auto_Open()
'  Make sure the menus aren't duplicated
    DeleteMenu strMenuName, intBarsNo

    'Add MainMenu
    CreateMainMenu strMenuName, strMenuNo, intBarsNo
   
    'Add to MainMenu - ControlPopup and ControlButton
    'MenuItem
    CreateMenuItem "Item &1", "Menu01", "71", False
    CreateMenuItem "Item &2", "Menu02", "72", False
    'SubMenu
    CreateSubMenu "&Group 1", True
        'SubMenuItem
        CreateSubMenuItem "GroupItem &1", "UMenu01", "71", False
End Sub
Sub DeleteMenu(strMenuName As String, intBarsNo As Integer)
'  This sub should be executed when the workbook is closed
'  Deletes the Menus
    On Error Resume Next
            Application.CommandBars(intBarsNo).Controls(strMenuName).Delete
    On Error GoTo 0
End Sub

Private Sub CreateMainMenu(strMenuName, strMenuNo As String, intBarsNo As Integer)
'En ny hovedmenu
    Set MenuObject = Application.CommandBars(intBarsNo).Controls.Add(Type:=msoControlPopup, _
                    Before:=strMenuNo, Temporary:=True)
        MenuObject.Caption = strMenuName
End Sub

Private Sub CreateMenuItem(strCaption, strOnAction, strFaceId As String, bolBeginGroup As Boolean)
'Et menupunkt punkt direkte i hovedmenu'en
    'MenuItem
    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
        With MenuItem
            .Caption = strCaption
            .OnAction = strOnAction
            .FaceId = strFaceId
            .BeginGroup = bolBeginGroup
        End With
End Sub

Private Sub CreateSubMenu(strCaption As String, bolBeginGroup As Boolean)
'En menugruppe i hovedmenuen
    'SubMenu
    Set SubMenu = MenuObject.Controls.Add(Type:=msoControlPopup)
        With SubMenu
            .Caption = strCaption
            .BeginGroup = bolBeginGroup
        End With
End Sub

Private Sub CreateSubMenuItem(strCaption, strOnAction, strFaceId As String, bolBeginGroup As Boolean)
'Et menupunkt i en menugruppe
    'SubMenu Item - UnderMenuPunkt
    Set SubMenuItem = SubMenu.Controls.Add(Type:=msoControlButton)
        With SubMenuItem
            .Caption = strCaption
            .OnAction = strOnAction
            .FaceId = strFaceId
            .BeginGroup = bolBeginGroup
        End With
End Sub

Private Sub Menu01()
'Macro for menu testing
    MsgBox "This is a do-nothing macro."
End Sub

Private Sub Menu02()
'Macro for menu testing
    MsgBox "This is a do-nothing macro."
End Sub

Private Sub UMenu01()
'Macro for menu testing
    MsgBox "This is a do-nothing macro."
End Sub
Avatar billede hubertus Seniormester
16. juni 2007 - 09:17 #2
Hej mira96ac
Har du også en løsning, hvor der ikke er en undermenu, men hvor makroen aktiveres blot der trykkes på menuknappen?
Avatar billede mira96ac Novice
16. juni 2007 - 13:54 #3
Her er den jeg bruger nu. Der er både undermenuer, subundermenuer og direkte links. Håber du kan bruge den.

Option Explicit

Public MenuObject As CommandBarPopup
Public SubMenu As CommandBarPopup
Public MenuItem As Object
Public SubMenuItem As CommandBarButton
Public SubMenuItem2 As CommandBarPopup
Public SubMenuItem3 As CommandBarButton
Public Const strMenuName As String = "&Min Menu"
Public Const strMenuNo As String = 11
Public Const intBarsNo As Integer = 1


Sub Auto_Open()
'  Make sure the menus aren't duplicated
    DeleteMenu strMenuName, intBarsNo

    'Add MainMenu
    CreateMainMenu strMenuName, strMenuNo, intBarsNo
   
    'Add to MainMenu - ControlPopup and ControlButton
    'MenuItem
   
    'SubMenu
    CreateSubMenu "&Regnskaber"
    'SubMenuItem
        CreateSubMenuItem "Klasse A-virksomheder", "UMenu01", "532"
        CreateSubMenuItem "Klasse B-virksomheder", "UMenu02", "532"
        CreateSubMenuItem "&Hjælp til regnskabsmodel", "Menu02", "42"
    CreateSubMenu2 "&Budgetter"
        'SubMenuItem
        CreateSubMenuItem "12 måneder", "UMenu03", "71"
        CreateSubMenuItem "Kvartal", "UMenu04", "72"
        CreateSubMenuItem "År", "UMenu05", "73"
        CreateSubMenu "&Indkomst- og formueopgørelse"
        'SubMenuItem
        CreateSubMenuItem "Grønt ark", "UMenu13", "532"
     
    CreateSubMenu "&Selskabsstiftelse"
    'SubMenuItem
        CreateSubMenuItem "Skattefri", "UMenu06", "591"
        CreateSubMenuItem "Skattepligtig", "UMenu07", "591"
    CreateSubMenu "&Diverse skabeloner"
        'SubMenuItem
        CreateSubMenuItem2 "Saldomeddelelser"
            CreateSubMenuItem3 "Dansk", "UMenu08", "83"
            CreateSubMenuItem3 "Engelsk", "UMenu09", "84"
            CreateSubMenuItem3 "Tysk", "UMenu10", "99"
        CreateSubMenuItem "Indholdsfortegnelse personlige", "UMenu11", "12"
        CreateSubMenuItem "Indholdsfortegnelse selskaber", "UMenu12", "12"
        CreateSubMenuItem "Efterangivelse moms", "UMenu17", "591"
        CreateSubMenu "&Vejledninger"
        'SubMenuItem
        CreateSubMenuItem "Låneomkostninger", "UMenu14", "591"
        CreateSubMenuItem "Fri telefon m.m.", "UMenu15", "591"
        CreateSubMenuItem "Koder", "UMenu16", "591"
    CreateMenuItem "&Arbejdspapirer", "Menu01", "05"
    CreateMenuItem "&Klientliste", "Menu03", "213"
End Sub
Sub DeleteMenu(strMenuName As String, intBarsNo As Integer)
'  This sub should be executed when the workbook is closed
'  Deletes the Menus
    On Error Resume Next
            Application.CommandBars(intBarsNo).Controls(strMenuName).Delete
    On Error GoTo 0
End Sub

Private Sub CreateMainMenu(strMenuName, strMenuNo As String, intBarsNo As Integer)
'En ny hovedmenu
    Set MenuObject = Application.CommandBars(intBarsNo).Controls.Add(Type:=msoControlPopup, _
                    Before:=strMenuNo, Temporary:=True)
        MenuObject.Caption = strMenuName
End Sub

Private Sub CreateMenuItem(strCaption, strOnAction, strFaceId As String)
'Et menupunkt punkt direkte i hovedmenu'en
    'MenuItem
    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
        With MenuItem
            .Caption = strCaption
            .OnAction = strOnAction
            .FaceId = strFaceId
        End With
End Sub

Private Sub CreateSubMenu(strCaption)
'En menugruppe i hovedmenuen
    'SubMenu
    Set SubMenu = MenuObject.Controls.Add(Type:=msoControlPopup)
        With SubMenu
            .Caption = strCaption
        End With
End Sub
Private Sub CreateSubMenu2(strCaption)
'En menugruppe i hovedmenuen
    'SubMenu
    Set SubMenu = MenuObject.Controls.Add(Type:=msoControlPopup)
        With SubMenu
            .Caption = strCaption
            .Enabled = False
        End With
End Sub

Private Sub CreateSubMenuItem(strCaption, strOnAction, strFaceId As String)
'Et menupunkt i en menugruppe
    'SubMenu Item - UnderMenuPunkt
    Set SubMenuItem = SubMenu.Controls.Add(Type:=msoControlButton)
        With SubMenuItem
            .Caption = strCaption
            .OnAction = strOnAction
            .FaceId = strFaceId
        End With
End Sub
Private Sub CreateSubMenuItem2(strCaption)
    Set SubMenuItem2 = SubMenu.Controls.Add(Type:=msoControlPopup)
        With SubMenuItem2
            .Caption = strCaption
        End With
End Sub
Private Sub CreateSubMenuItem3(strCaption, strOnAction, strFaceId As String)
'Et menupunkt i en menugruppe
    'SubMenu Item - UnderMenuPunkt
    Set SubMenuItem3 = SubMenuItem2.Controls.Add(Type:=msoControlButton)
        With SubMenuItem3
            .Caption = strCaption
            .OnAction = strOnAction
            .FaceId = strFaceId
        End With
End Sub

Private Sub Menu01()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\Arbejdspapirer\Arbejdspapirer.xlt"
End Sub
Private Sub Menu02()
Dim WordObj As Object
    Set WordObj = CreateObject("word.basic")
    WordObj.appshow
    WordObj.fileopen Name:="H:\Kunder\0_Mastere\Regnskab selskaber klasse B, C og D\Manual regnskabsmodel B.doc"
End Sub
Private Sub Menu03()
Workbooks.Open Filename:="H:\SHEETS\SR\Klientliste.xls"
End Sub

Private Sub UMenu01()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\Regnskab personlige klasse A\Regnskab med makro A.xlt"
End Sub
Private Sub UMenu02()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\Regnskab selskaber klasse B, C og D\Regnskab med makro BC.xlt"
End Sub
Private Sub UMenu03()
   
End Sub
Private Sub UMenu04()
   
End Sub
Private Sub UMenu05()
 
End Sub
Private Sub UMenu06()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\Selskabsstiftelse\Skattefri\Selskabsstiftelse.xlt"
End Sub
Private Sub UMenu07()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\Selskabsstiftelse\Skattepligtig\Selskabsstiftelse.xlt"
End Sub
Private Sub UMenu08()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\Diverse standarder\Saldomeddelelser\Dansk.xlt"
End Sub
Private Sub UMenu09()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\Diverse standarder\Saldomeddelelser\Engelsk.xlt"
End Sub
Private Sub UMenu10()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\Diverse standarder\Saldomeddelelser\Tysk.xlt"
End Sub
Private Sub UMenu11()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\SR Revision AS\Mappeindeling personlige.xls"
End Sub
Private Sub UMenu12()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\SR Revision AS\Mappeindeling selskaber.xls"
End Sub
Private Sub UMenu13()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\Diverse standarder\I & F - Grønt ark.xlt"
End Sub
Private Sub UMenu14()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\SR Revision AS\låneomk skat.xls"
End Sub
Private Sub UMenu15()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\Diverse standarder\Fri telefon m.v..xls"
End Sub
Private Sub UMenu16()
    Workbooks.Open Filename:="H:\SHEETS\SR\Diverse koder\Koder.xls"
End Sub
Private Sub UMenu17()
    Workbooks.Open Filename:="H:\Kunder\0_Mastere\Moms\Momsefterangivelse.xls"
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