Microsoft Excel

Herbers Excel/VBA-Archiv

Benutzerdefinierte Symbolleiste per VBA

Betrifft: Benutzerdefinierte Symbolleiste per VBA von: Andre Stein
Geschrieben am: 21.08.2014 10:05:36

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

  

Betrifft: AW: Benutzerdefinierte Symbolleiste per VBA von: Mullit
Geschrieben am: 21.08.2014 10:18:10

Hallo,

da es sich noch um XL 2003 handelt, ist hier Nepumuks Symbolleistentut. das Mittel der Wahl...

Gruß,


  

Betrifft: AW: Benutzerdefinierte Symbolleiste per VBA von: Andre Stein
Geschrieben am: 21.08.2014 10:27:26

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


  

Betrifft: AW: Benutzerdefinierte Symbolleiste per VBA von: Mullit
Geschrieben am: 21.08.2014 11:02:55

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


  

Betrifft: AW: Benutzerdefinierte Symbolleiste per VBA von: Andre Stein
Geschrieben am: 21.08.2014 11:07:24

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


  

Betrifft: AW: Benutzerdefinierte Symbolleiste per VBA von: Martin
Geschrieben am: 21.08.2014 11:44:45

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


  

Betrifft: Kleine Ergänzung von: Martin
Geschrieben am: 21.08.2014 12:07:45

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


  

Betrifft: AW: Kleine Ergänzung von: Andre Stein
Geschrieben am: 21.08.2014 12:49:46

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


  

Betrifft: AW: Kleine Ergänzung von: Martin
Geschrieben am: 21.08.2014 13:16:17

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:



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


  

Betrifft: Noch eine kleine Ergänzung... von: Martin
Geschrieben am: 21.08.2014 13:27:59

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:



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


  

Betrifft: ...ich Ideot... von: Martin
Geschrieben am: 21.08.2014 13:34:15

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


  

Betrifft: ...nicht mal Idiot kann ich richtig schreiben owT von: Martin
Geschrieben am: 21.08.2014 13:35:05

owT


  

Betrifft: AW: ...nicht mal Idiot kann ich richtig schreiben owT von: Andre Stein
Geschrieben am: 21.08.2014 14:06:10

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é


  

Betrifft: AW: ...nicht mal Idiot kann ich richtig schreiben owT von: Martin
Geschrieben am: 21.08.2014 22:45:21

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


  

Betrifft: AW: ...nicht mal Idiot kann ich richtig schreiben owT von: Andre Stein
Geschrieben am: 22.08.2014 10:49:38

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


  

Betrifft: AW: ...nicht mal Idiot kann ich richtig schreiben owT von: Martin
Geschrieben am: 22.08.2014 11:27:00

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


 

Beiträge aus den Excel-Beispielen zum Thema "Benutzerdefinierte Symbolleiste per VBA"