Microsoft Excel

Herbers Excel/VBA-Archiv

Makrosammlung automatisch in Menü einfügen | Herbers Excel-Forum


Betrifft: Makrosammlung automatisch in Menü einfügen von: guentherh
Geschrieben am: 22.02.2012 10:02:38

Kann man die in einem AddIn enthaltenen Makro's als Liste bekommen?

ich möchte das Aufbauen eines BenutzerMenü's automatisieren, so dass wenn neue Makro's im AddIn sind, diese automatisch zum Menü hinzugefügt werden.
Derzeit muss ich für jedes neue Makro auch einen Code mit CommandBars("MeinMenue").Controls.Add schreiben.

Hat hier jemand einen Tip?

Grüße,
Günther

  

Betrifft: AW: Makrosammlung automatisch in Menü einfügen von: mumpel
Geschrieben am: 22.02.2012 10:08:39

Hallo!

Soetwas ist nicht möglich. Du musst also weiterhin auch die passenden Codezeilen schreiben.

Gruß, René


  

Betrifft: AW: Makrosammlung automatisch in Menü einfügen von: guentherh
Geschrieben am: 22.02.2012 11:19:50

Hallo René,
sag das mal denen von Toyota! ;-)
schade, hatte gehofft, dass es nur nicht in der Hilfe zu finden ist. Schließlich können die von MS das immerhin versteckt tun, was aus dem Makrodialog zu erkennen ist (F8)
:-(
trotzdem Danke,
Günther



  

Betrifft: AW: Makrosammlung automatisch in Menü einfügen von: Rudi Maintaire
Geschrieben am: 22.02.2012 12:22:43

Hallo,
geht nur ohne Projektschutz.

Sub CreateMenu()
  Dim arrSubs
  Dim oBar As CommandBar, oPop As CommandBarPopup, oBtn As CommandBarButton
  Dim iCounter As Integer
  
  Const sBar As String = "TestBar"
  
  arrSubs = MakroListe(ThisWorkbook)
  
  On Error Resume Next
  Application.CommandBars(sBar).Delete
  On Error GoTo 0
  
  Set oBar = Application.CommandBars.Add(sBar, msoBarTop, , True)
  oBar.Visible = True
  
  For iCounter = 1 To UBound(arrSubs)
    Set oPop = oBar.FindControl(Tag:=arrSubs(iCounter, 2))
    If oPop Is Nothing Then
      Set oPop = oBar.Controls.Add(msoControlPopup)
      With oPop
        .Tag = arrSubs(iCounter, 2)
        .Caption = arrSubs(iCounter, 2)
        .BeginGroup = True
      End With
    End If
    Set oBtn = oPop.Controls.Add(msoControlButton)
    With oBtn
      .Caption = arrSubs(iCounter, 1)
      .OnAction = arrSubs(iCounter, 1)
      .Style = msoButtonIconAndCaption
    End With
  Next
  
End Sub

Function MakroListe(wkb As Workbook)
  Dim vbc As Object, iRow As Long, sText
  Dim sName As String
  Dim objSubs As Object, arrSubs, arrKeys, arrItems
  Set objSubs = CreateObject("Scripting.Dictionary")
  
  For Each vbc In wkb.VBProject.VBComponents
    iRow = 1
    If vbc.Type = 1 Then
      With vbc.CodeModule
        Do While iRow < .CountOfLines + 1
          If .ProcOfLine(iRow, 0) <> "" Then
            sName = .ProcOfLine(iRow, 0)
            If Not objSubs.exists(sName) Then
              sText = Trim(.Lines(.ProcBodyLine(sName, 0), 1))
              If Not sText Like "Private*" And Not sText Like "Function*" Then
                If Right(sText, 2) = "()" Then
                  objSubs(sName) = vbc.Name
                End If
              End If
              iRow = .ProcStartLine(sName, 0) + .ProcCountLines(sName, 0) - 1
            End If
          End If
          iRow = iRow + 1
        Loop
      End With
    End If
  Next vbc
  
  arrKeys = objSubs.keys
  arrItems = objSubs.Items
  ReDim arrSubs(1 To objSubs.Count, 1 To 2)
  For iRow = 0 To UBound(arrKeys)
    arrSubs(iRow + 1, 1) = arrKeys(iRow)
    arrSubs(iRow + 1, 2) = arrItems(iRow)
  Next
  
  MakroListe = arrSubs
End Function

Gruß
Rudi


  

Betrifft: Also doch... von: mumpel
Geschrieben am: 22.02.2012 12:44:51

eine Möglichkeit. Gut zu wissen. Aber: Ab Office 2007 (RibbonX) nicht mehr.


  

Betrifft: AW: Also doch... von: Rudi Maintaire
Geschrieben am: 22.02.2012 12:50:59

Hallo,
Ab Office 2007 (RibbonX) nicht mehr.
Is klar. Dann taucht's nur unter Add-Ins auf.

Er hat aber 2003 angegeben.

Gruß
Rudi


  

Betrifft: AW: Also doch... von: guentherh
Geschrieben am: 22.02.2012 13:59:19

Hallo Rudi,
Super vielen Dank!!
funktioniert prächtig!
Die Problematik mit den Ribbons kommt in ein paar Wochen.
Da fällt mir ja auf Anhieb gar nicht ein, wo ich das hinhaben will.
Zumindest funktioniert die bisherige Prozedur, die die wichtigsten Funktionen auf die rechte Maustaste legt, unverändert weiter.

nochmals vielen Dank,
Günther



Beiträge aus den Excel-Beispielen zum Thema "Makrosammlung automatisch in Menü einfügen"