Commandbar auch bei Diagrammen?

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Adrian.

    Commandbar auch bei Diagrammen?

    Hallo,

    habe ein kleines Problem mit meinem Menü:
    mit

    Visual Basic-Quellcode

    1. Set menü_neu = leiste.Controls.Add(Type:=msoControlPopup, temporary:=False)
    2. menü_neu.Caption = menüname1
    3. Set befehl = menü_neu.Controls.Add(Type:=msoControlButton, ID:=1)
    4. With befehl
    5. .Caption = "&Importieren"
    6. .OnAction = "importieren"
    7. End With

    erstelle ich ein Menü das auch wie gewünscht funktioniert.

    Allerdings besteht mein workbook aus Tabellenblättern und Diagrammblättern.
    Die Routine fügt das Menü jeweils nur für die aktive Blattart ein.
    Gibt es eine Möglichkeit, das Menü für alle Blatttypen zu definieren, oder muss ich das 2* machen?

    Gruß
    Adrian

    Adrian schrieb:

    Die Routine fügt das Menü jeweils nur für die aktive Blattart ein.

    Glaube ich nicht.

    Zuerst einmal mit welchem Excel arbeitest Du?

    Was für ein Typ ist denn das Objekt Leiste und menü_neu?

    Hast Du Option Explicit angegeben?
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Glaub ich nicht
    Vielen Dank für Dein Vertrauen! ^^ Ist aber wirklich so.
    Ich habe hier Excel 2003 SP3.
    Option Explicit ist gesetzt.

    Ich habe 2 Routinen: Menü und Menü_aufräumen.
    Menü wird beim Open und Activate aufgerufen, Menü_aufräumen von Menü, Deactivate und Close (jeweils Workbook-Events).

    Visual Basic-Quellcode

    1. Public Sub Menü()
    2. Dim leiste As Object
    3. Dim menü_neu As Object
    4. Dim befehl As Object
    5. Call menü_aufräumen ' ggf. Einträge löschen
    6. Set leiste = CommandBars.ActiveMenuBar
    7. 'Überschrift
    8. Set menü_neu = leiste.Controls.Add(Type:=msoControlPopup, temporary:=False)
    9. menü_neu.Caption = menüname1
    10. Set befehl = menü_neu.Controls.Add(Type:=msoControlButton, ID:=1)
    11. With befehl
    12. .Caption = "&Importieren"
    13. .OnAction = "importieren"
    14. End With
    15. ' hier kommen noch weitere Einträge
    16. End Sub
    17. Public Sub menü_aufräumen()
    18. On Error Resume Next
    19. CommandBars.ActiveMenuBar.Controls(menüname1).Delete
    20. End Sub


    workbook open sieht so aus:

    Visual Basic-Quellcode

    1. Public Sub workbook_open()
    2. Sheets(1).Activate
    3. Menü
    4. End Sub


    sheets(1) ist ein Tabellenblatt.
    Nach dem Öffnen hab ich schon den Zustand, dass das Menü nur bei den Tabellenblättern sichtbar ist. Wenn ich das Makro manuell auf einem Diagrammblatt starte, kriege ich auch dort das Menü.
    Zwei Anmerkungen:
    1. So wie Du das vor hast, wirst Du über kurz oder lang viele Menüeinträge haben.
    2. Wenn Du eine Symbolleiste erstellst, statt in der Menuleiste rum zuschreiben, hast Du nicht das Problem mit der Zweiten Menuleiste für für Diagramme.

    Der beste Weg ist aber, das ganze über ein ADDIN zu steueren und nicht über die Datei selber.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    1. So wie Du das vor hast, wirst Du über kurz oder lang viele Menüeinträge haben.
    Nein, denn ich räume ja vor jedem Neueintrag wieder auf (ist auch getestet)

    Symbolleisten wären auch ne Lösung, aber es muss doch auch als Menü gehen?

    Mit ADDIN hab ich bisher keine Erfahrung. Muss dazu was installiert werden? Mein Ziel ist, dass die Datei von verschiedenen Anwendern auf verschiedenen Rechnern ohne weitere Schritte benutzt werden kann.

    Wahrscheinlich ist es das einfachste (wenn auch nicht sehr elegant) dass ich ein Diagrammsheet aktiviere und dort die Menü-Funktion nochmal rennen lasse...