Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1376to1380
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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ß,

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

Anzeige
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

...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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige