Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Benutzerdefinierte Symbolleiste per VBA

Forumthread: Benutzerdefinierte Symbolleiste per VBA

Benutzerdefinierte Symbolleiste per VBA
21.08.2014 10:05:36
Andre
Guten Morgen liebes Forum!
Ich möchte mit VBA eine Symbolleiste mit einem Button installieren. Bei dem Button kann es sich z. B. um ein Smiley handeln, neben dem Button sollte noch ein kleiner Text stehen. Bei Druck auf den Button sollte ein bestimmtes Makro ausgeführt werden. Die Symbolleiste sollte beim Schließen der Arbeitsmappe wieder verschwinden. Mein großer Wunsch wäre, dass die Symbolleiste mit dem Button ganz links oben erscheint, quasi unter der Menuleiste (ich muss hier leider noch Excel 2003 verwenden). Natürlich stehen da standardmäßig schon die anderen Symbolleisten. Kann man die benutzerdefinierte Symbolleiste da nicht noch irgendwie voranstellen, quasi vordrängeln?
Ich bedanke mich im Voraus herzlich für das Interesse und die Mühe, die ich bereite...
Andre

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Benutzerdefinierte Symbolleiste per VBA
21.08.2014 10:18:10
Mullit
Hallo,
da es sich noch um XL 2003 handelt, ist hier Nepumuks Symbolleistentut. das Mittel der Wahl...
Gruß,

AW: Benutzerdefinierte Symbolleiste per VBA
21.08.2014 10:27:26
Andre
Hallo Mullit,
puh, das ist ja eine Menge Text, das muss ich wohl in den Feierabend verlegen. Aber beim ersten Überfliegen habe ich jetzt auch keinen Hinweis darauf gefunden, wie ich meinen Button ganz am Anfang positionieren kann. Bei meinen bisherigen Versuchen landete der Button immer ganz rechts am Rand.
Vielen Dank trotzdem, für weitere Kommentare bin ich aber immer noch dankbar...
Gruß,
Andre

Anzeige
AW: Benutzerdefinierte Symbolleiste per VBA
21.08.2014 11:02:55
Mullit
Hallo,
die Eigenschaft, die Du suchst, ist RowIndex.
In der .Add Methode mußt Du den Positionparameter auf msoBarTop setzen.
In dem Beispiel ist für Dich ja nur das Einfügen der Symbolleiste (CommandBars.Add) mit einem Button(s.a. 1. Teil) relevant, die anderen Controls kannst Du ja zunächst ignorieren...
Gruß,

Anzeige
AW: Benutzerdefinierte Symbolleiste per VBA
21.08.2014 11:07:24
Andre
Hi Mullit,
RowIndex hört sich ganz gut an, dass werde ich später mal vertiefen. Bin VBA-Anfänger, da sehe ich den Wald vor lauter Bäumen nicht. Danke für die Stichworte!
Gruß,
Andre

AW: Benutzerdefinierte Symbolleiste per VBA
21.08.2014 11:44:45
Martin
Hallo André,
kopiere mal folgenden Code ins Klassenmodul "DieseArbeitsmappe" und starte deine Exceldatei neu:
Private Sub Workbook_Open()
Dim cmdBar As CommandBar
Set cmdBar = Application.CommandBars.Add
With cmdBar
.Name = "MyCommandBar" 'Name der neuen Symbolleiste
.RowIndex = 1
.Position = msoBarTop
.Visible = True
With .Controls.Add(Type:=msoControlButton, Temporary:=True)
.Style = msoButtonIconAndCaption
.Caption = "Mein Text" 'Test zum Button
.OnAction = "Makro1"   'Verweis auf Makro
.FaceId = 59
End With
End With
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim cmdBar As CommandBar
For Each cmdBar In Application.CommandBars
With cmdBar
If .Name = "MyCommandBar" Then .Delete
End With
Next
End Sub
Viele Grüße
Martin

Anzeige
Kleine Ergänzung
21.08.2014 12:07:45
Martin
Hallo Andre,
ich habe jetzt auch die Temporary-Eigenschaft der Symbolleiste auf True gesetzt. Damit ist sichergestellt, dass deine Symbolleiste wirklich nicht gespeichert wird (...falls das BeforeClose-Ereignis mal nicht auslösen sollte):
Private Sub Workbook_Open()
Dim cmdBar As CommandBar
Set cmdBar = Application.CommandBars.Add("MyCommandBar", msoBarTop, Temporary:=True)
With cmdBar
.RowIndex = 1
.Visible = True
With .Controls.Add(Type:=msoControlButton)
.Style = msoButtonIconAndCaption
.Caption = "Mein Text" 'Text zum Button
.OnAction = "Makro1"   'Verweis auf Makro
.FaceId = 59
End With
End With
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim cmdBar As CommandBar
For Each cmdBar In Application.CommandBars
With cmdBar
If .Name = "MyCommandBar" Then .Delete
End With
Next
End Sub
Viele Grüße
Martin

Anzeige
AW: Kleine Ergänzung
21.08.2014 12:49:46
Andre
Hallo Martin!
Vielen Dank für deine schnelle und umfangreiche Hilfe! Da ich in meiner Tabelle im Bereich Workbook-Open schon etwas stehen habe, habe ich dein Makro erst einmal als eigenständiges Makro eingefügt, damit ich üben kann. Im Grunde ist es das, was ich brauche. Allerdings taucht meine neue Symbolleiste mit dem Text daneben nun über der Menüzeile auf. Damit throne ich zwar über allem anderen, aber etwas besser wäre es, wenn es direkt als erste Symbolleiste unter der Menüzeile erschiene.
Dann noch eine zusätzliche Frage, ich hoffe, das ist nicht zu viel Arbeit: wie bzw. wo muß ich das Makro erweitern, wenn ich noch ein oder zwei zusätzliche Buttons (also insgesamt zwei oder drei) einfügen möchte?
Viele Grüße,
Andre

Anzeige
AW: Kleine Ergänzung
21.08.2014 13:16:17
Martin
Hallo Andre,
ich bin gerade auf dem Sprung und werde erst heute Abend wieder antworten können. Schnell zu deinen Fragen:
1. Du hattest in deiner Aufgabenstellung geschrieben: "Mein großer Wunsch wäre, dass die Symbolleiste mit dem Button ganz links oben erscheint, quasi unter der Menuleiste (ich muss hier leider noch Excel 2003 verwenden)." Ich habe das Makro getestet und bei mir steht es unter der Menüzeile:
Userbild
Eventuell ist dein Menü verstellt: Gehe im Menü mal auf "Extras", "Anpassen..." und klicke auf "Zurücksetzen...", damit wird alles auf Standard zurückgesetzt. Alternativ kannst du den RowIndex-Wert auch einfach höher setzen.
2. Wie du meinen Code in dein Workbook-Open-Ereignis einbindest, bleibt dir überlassen. Du hättest meinen Code auch einfach über bzw. unter deinen bisherigen Code oder anstelle des Makroverweises setzen können.
3. Für einen weiteren Button sind nur 6 Zeilen erforderlich. Ich habe mal einen weiteren Button angelegt und den entscheidenden Abschnitt im Code fett-kursiv formatiert:
Private Sub Workbook_Open()
Dim cmdBar As CommandBar
Set cmdBar = Application.CommandBars.Add("MyCommandBar", msoBarTop, Temporary:=True)
With cmdBar
.RowIndex = 1
.Visible = True
'Erster Button
With .Controls.Add(Type:=msoControlButton)
.Style = msoButtonIconAndCaption
.Caption = "Mein Text" 'Text zum Button 1
.OnAction = "Makro1"   'Verweis auf Makro 1
.FaceId = 59
End With
'Zweiter Button
With .Controls.Add(Type:=msoControlButton)
.Style = msoButtonIconAndCaption
.Caption = "Mein Text2" 'Text zum Button 2
.OnAction = "Makro2"   'Verweis auf Makro 2
.FaceId = 59
End With

End With
End Sub
Viele Grüße
Martin

Anzeige
Noch eine kleine Ergänzung...
21.08.2014 13:27:59
Martin
Hallo Andre,
du kannst auch festlegen, dass deine benutzerdefinierte Symbolleiste auf der selben Zeile wie die Standard-Symbolleiste liegen soll. Einfach die Zeile mit dem .RowIndex so austauschen:
.RowIndex = Application.CommandBars("Standard").RowIndex
Dann sollte es so aussehen:
Userbild
Wenn deine Symbolleiste aber über der Standardsymbolleiste liegen soll, dann schreibe:
.RowIndex = Application.CommandBars("Standard").RowIndex - 1
Okay, jetzt bin ich aber wirklich weg ;-)
Viele Grüße
Martin

Anzeige
...ich Ideot...
21.08.2014 13:34:15
Martin
Hallo Andre,
ich noch mal. Selbstverständlich ist es klüger zu schreiben, dass die benutzerdefinierte Symbolleiste unterhalb der Menüleiste angelegt werden soll. Also schreibe es so:
.RowIndex = Application.CommandBars("Worksheet Menu Bar").RowIndex + 1
So, jetzt habe ich Verspätung...
Viele Grüße
Martin

Anzeige
...nicht mal Idiot kann ich richtig schreiben owT
21.08.2014 13:35:05
Martin
owT

AW: ...nicht mal Idiot kann ich richtig schreiben owT
21.08.2014 14:06:10
Andre
Hallo Martin!
Tut mir leid, dass du dich meinetwegen verspätest! Ich kann mich über die Hilfsbereitschaft hier im Forum immer nur wundern, es gibt doch noch gute Menschen! Meine Symbolleiste steht jetzt links neben der Standard-Symbolleiste, da sieht sie sehr gut aus ;-) Heute Abend werde ich dann mal die Variante mit den zwei bzw. drei Buttons ausprobieren, dann kann ich das mehr genießen...
Aufrichtigen herzlichen Dank!
Viele Grüße,
André

Anzeige
AW: ...nicht mal Idiot kann ich richtig schreiben owT
21.08.2014 22:45:21
Martin
Hallo André,
es freut mich, dass du zufrieden bist. Hoffentlich haben auch deine Tests mit weiteren Buttons gut geklappt. Mit Herbert Symbolpicker kannst du noch passende Icons zu deinen Buttons suchen (...ist die FaceID). Excel 2003 bietet jede Menge Möglichkeiten, um verschiedenste Controls in Symbolleisten einzubinden.
Viele Grüße
Martin

Anzeige
AW: ...nicht mal Idiot kann ich richtig schreiben owT
22.08.2014 10:49:38
Andre
Hallo Martin!
Auch meine Versuche mit mehreren Symbolen waren erfolgreich, jetzt funktioniert das ganze erheblich besser. Vorher hatte ich ein Symbol manuell eingefügt und mit einem Makro verknüpft, aber oft funktionierte das dann nicht mehr, wenn ich an meiner Tabelle etwas geändert habe. Nun kann ich die Tabelle auch an andere weitergeben und die können dann die Symbole ebenfalls nutzen. Ich bedauere mich ja ständig selbst, dass ich hier noch mit Excel 2003 arbeiten muss (Verwaltungen sind da manchmal rückständig...), stelle aber oft fest, dass Excel 2003 mich aber noch nie an Grenzen gebracht hat, irgendwie ist damit sehr viel möglich...
Erneut vielen Dank, lieber Martin, für die schnelle und umfangreiche Hilfe!
Viele Grüße,
Andre

Anzeige
AW: ...nicht mal Idiot kann ich richtig schreiben owT
22.08.2014 11:27:00
Martin
Hallo André,
abgesehen des von Microsoft im April eingestellten Supports (Sicherheitslücken werden nicht mehr geschlossen) ist Excel 2003 meiner Ansicht nach Top. Obwohl ich auch Excel 2010 habe, arbeite ich bevorzugt mit Excel 2003, da es wesentlich weniger Systemressourcen schluckt und in vielen Bereichen schneller arbeitet. Man darf natürlich nicht vernachlässigen, dass der Funktionsumfang seit Excel 2007 massiv ausgebaut wurde, was den Performanceverlust erklärt. Leider wird es nur eine Frage der Zeit sein, dass man sich aus Kompatibilitätsgründen von Excel 2003 verabschieden muss (...entweder, weil es auf künftigen Windows-Versionen nicht mehr lauffähig ist und/oder weil das Office-Kompatibilitätspack Arbeitsmappen künftiger Excelversionen nicht mehr verarbeiten kann).
Viele Grüße
Martin
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Benutzerdefinierte Symbolleiste in Excel 2003 erstellen


Schritt-für-Schritt-Anleitung

Um eine benutzerdefinierte Symbolleiste in Excel 2003 zu erstellen, folge diesen Schritten:

  1. Öffne das VBA-Editor-Fenster:

    • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Füge den Code in das Klassenmodul "DieseArbeitsmappe" ein:

    • Kopiere den folgenden VBA-Code:
    Private Sub Workbook_Open()
       Dim cmdBar As CommandBar
       Set cmdBar = Application.CommandBars.Add("MyCommandBar", msoBarTop, Temporary:=True)
       With cmdBar
           .RowIndex = Application.CommandBars("Worksheet Menu Bar").RowIndex + 1
           .Visible = True
           'Erster Button
           With .Controls.Add(Type:=msoControlButton)
               .Style = msoButtonIconAndCaption
               .Caption = "Mein Text" 'Text zum Button
               .OnAction = "Makro1"   'Verweis auf Makro 1
               .FaceId = 59
           End With
           'Zweiter Button
           With .Controls.Add(Type:=msoControlButton)
               .Style = msoButtonIconAndCaption
               .Caption = "Mein Text2" 'Text zum Button 2
               .OnAction = "Makro2"   'Verweis auf Makro 2
               .FaceId = 59
           End With
       End With
    End Sub
    
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
       Dim cmdBar As CommandBar
       For Each cmdBar In Application.CommandBars
           If cmdBar.Name = "MyCommandBar" Then cmdBar.Delete
       Next
    End Sub
  3. Schließe den VBA-Editor und speichere deine Arbeitsmappe.

  4. Starte Excel neu. Die benutzerdefinierte Symbolleiste sollte nun unter der Menüleiste erscheinen.

  5. Füge zusätzliche Buttons hinzu, indem du weitere With .Controls.Add-Abschnitte im obigen Code hinzufügst.


Häufige Fehler und Lösungen

  • Symbolleiste erscheint nicht:

    • Überprüfe, ob das Makro korrekt im Klassenmodul eingefügt wurde und ob du die Datei als Makro-enabled (.xlsm) gespeichert hast.
  • Button wird nicht angezeigt:

    • Stelle sicher, dass die Visible-Eigenschaft auf True gesetzt ist und dass die RowIndex-Eigenschaft korrekt konfiguriert ist.
  • Symbolleiste wird nicht gelöscht:

    • Achte darauf, dass der Code im Workbook_BeforeClose korrekt ist und dass du die Symbolleiste mit dem richtigen Namen referenzierst.

Alternative Methoden

  • Excel Schnellzugriff: Du kannst auch die Schnellzugriffsleiste in Excel anpassen, um eigene Symbole hinzuzufügen. Klicke mit der rechten Maustaste auf die Schnellzugriffsleiste und wähle "Anpassen", um Buttons hinzuzufügen.

  • Eigene Toolbar: Anstelle einer VBA-Lösung kannst du auch eine benutzerdefinierte Toolbar mithilfe der Excel-Benutzeroberfläche erstellen. Dies ist jedoch in Excel 2003 eingeschränkt.


Praktische Beispiele

  1. Erstelle eine Symbolleiste mit einem Makro:

    • Füge ein Makro namens "Makro1" hinzu, das eine bestimmte Aufgabe in deiner Arbeitsmappe ausführt, z.B. das Formatieren von Zellen.
  2. Füge Icons hinzu:

    • Verwende die FaceId-Eigenschaft, um ein Icon für deinen Button festzulegen. Du kannst verschiedene IDs ausprobieren, um die gewünschte Darstellung zu erreichen.

Tipps für Profis

  • Nutze den Herbert Symbolpicker: Dieser hilft dir, die passenden Icons für deine Buttons zu finden und die FaceId zu bestimmen.

  • Optimiere die Leistung: Wenn du mit Excel 2003 arbeitest, achte darauf, dass du die Arbeitsmappe regelmäßig speicherst, um Datenverluste zu vermeiden.

  • Experimentiere mit verschiedenen RowIndex-Werten: Um die Position deiner benutzerdefinierten Symbolleiste zu optimieren, kannst du den RowIndex anpassen, bis du die gewünschte Position unter der Menüleiste erreichst.


FAQ: Häufige Fragen

1. Wie kann ich die Symbolleiste dauerhaft speichern? Die Symbolleiste wird in Excel 2003 nicht dauerhaft gespeichert, da wir sie hier als temporär definieren. Wenn du sie dauerhaft haben möchtest, musst du den Code in das "Personal.xls"-Modul einfügen.

2. Kann ich mehr als zwei Buttons hinzufügen? Ja, du kannst so viele Buttons hinzufügen, wie du möchtest. Kopiere einfach den With .Controls.Add-Block und passe die Caption und OnAction-Eigenschaften an.

3. Was ist der Unterschied zwischen .Visible = True und Temporary = True? Temporary = True bedeutet, dass die Symbolleiste nicht gespeichert wird, während .Visible = True die Sichtbarkeit der Symbolleiste beim Öffnen der Arbeitsmappe steuert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige