Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

CommandButton verfügbar in mehreren Blättern

Forumthread: CommandButton verfügbar in mehreren Blättern

CommandButton verfügbar in mehreren Blättern
09.07.2007 14:15:58
Dirk N.

Hallo an dieses nette Forum,
gleich zu Wochenbeginn habe ich eine harte Nuss zu knacken.
Ich habe einen CommandButton in 'Tabelle1', der je nach Auswahl auch seine "Caption" u. seine Farbe ändert.
Nun umfasst die Datei im Original allerdings ca. 40 Sheets u. ich würde diesen Button gern in mehreren Sheets verfügbar machen.
Und da beginnen meine Probleme (s. auch Level :-( ):
1. Zwar könnte ich den Button-Code in jedes betreffende Sheet schreiben, aber dann ändert sich ja der Status nicht, wenn die Auswahl in einem anderen Sheet erfolgt.
2. Wohin gehört der Button-Code richtigerweise bzw. wie muß er geändert werden, damit der aktuelle Status in allen Sheets entsprechend ersichtlich u. wählbar ist ?
Zur Veranschaulichung habe ich da mal etwas vorbereitet: ;-) ;-)
https://www.herber.de/bbs/user/43967.xls
Ich hoffe, dieses Vorhaben ist nicht unmöglich u. mir kann geholfen werden...
MfG Dirk N.

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CommandButton verfügbar in mehreren Blättern
09.07.2007 14:37:52
Wolli
Hallo Dirk, ein nicht eleganter, aber einfacher Ansatz:
- Code so lassen
- zusätzlich beim Aktivieren jedes Sheets [Private Sub Worksheet_Activate()] z.B. in Abhängigkeit z.B. vom Schutzstatus den Button verändern.
EIN Button in MEHREREN Sheets dürfte nicht gehen.
Alternativ kann man auch eine eigene Symbolleiste bauen, die blattunabhängig den Button zeigt.
Gruß, Wolli

Anzeige
AW: CommandButton verfügbar in mehreren Blättern
09.07.2007 14:57:45
Dirk N.
Hallo Wolli,
deine Idee: "- zusätzlich beim Aktivieren jedes Sheets [Private Sub Worksheet_Activate()] z.B. in Abhängigkeit z.B. vom Schutzstatus den Button verändern." ist super u. kommt meinen Vorstellungen am Nahesten.
Aber WIE ist das zu realisieren ?
Kannst du mir da evtl. weiterhelfen ?
MfG Dirk N.
P.S.: Dein Gedanke bezüglich der benutzerdef. Symbolleiste "schoss" mir auch schon durch den Kopf u. ich fand ihn eigentlich genial, aber leider hat sich die Mehrheit dagegen entschieden (mit unterschiedlichsten Einwänden...)

Anzeige
AW: CommandButton verfügbar in mehreren Blättern
09.07.2007 21:58:25
Gerd L
Hallo Dirk!
'Code in allen Tabellenblatt-Modulen mit Commandbuttons


Private Sub CommandButton1_Click()
Makro1
End Sub


'Code in einem Standardmodul, z.B. Modul1
Sub Makro1()
Dim objWs As Worksheet
Dim blnProtect As Boolean
blnProtect = Tabelle1.CommandButton1.Caption = "Alle Blätter schützen"
Application.ScreenUpdating = False
For Each objWs In ThisWorkbook.Worksheets
If blnProtect Then
objWs.Protect
Worksheets(objWs.Name).CommandButton1.BackColor = &HC0C0&
Else
objWs.Unprotect
Worksheets(objWs.Name).CommandButton1.BackColor = &HFF&
End If
Worksheets(objWs.Name).CommandButton1.Caption = IIf(blnProtect, "Alle Blätter entschützen", "Alle Blätter schützen")
Next
Application.ScreenUpdating = True
End Sub


Gruß Gerd

Anzeige
AW: CommandButton verfügbar in mehreren Blättern
10.07.2007 00:16:08
Dirk N.
Hallo Gerd,
bitte entschuldige meine späte Antwort - ich bin gerade erst wieder rein.
Natürlich mußte ich deinen Vorschlag sofort testen u. tatsächlich - funktioniert perfekt !
Genauso hatte ich es mit meinen laienhaften VBA-Kenntnissen auch schon ausprobiert, allerdings scheiterte ich an dieser "Kleinigkeit" :
"blnProtect = Tabelle1.CommandButton1.Caption..."
Da wäre ich allein wohl nieeee drauf gekommen u. danke dir wiedermal vielmals !
Natürlich danke ich auch Wolli für seine Anregungen u. wünsche euch allen eine erfolgreiche Woche.
MfG Dirk N.

Anzeige
AW: Prüfen, ob's Commandbutton gibt
10.07.2007 07:38:42
Gerd L
Hallo Dirk,
danke für die Rückmeldung.
Nachträglich habe ich festgestellt, dass der Code nicht läuft, falls in einem Tabellenblatt der
Datei kein CommandButton (aus Forms erstellt) vorhanden ist.
Die Prüfung, ob dieser jeweils im Sheet vorhanden ist, habe ich leider nicht hingekriegt.
Vielleicht hat ein anderer hierzu eine Idee.
Ich stelle den Beitrag deshalb auf noch offen.
Gruß Gerd

Anzeige
AW: Prüfen, ob's Commandbutton gibt
10.07.2007 10:20:43
Wolli
Hallo Dirk, hallo Gerd, ich hatte gestern auch noch gebastelt und war daran gescheitert, mit dem Code in Sheet x den Button in Sheet y anzusprechen. Habt Ihr eine Ahnung, warum es mit Worksheets(objWs.Name).CommandButton1.Caption geht, nicht aber mit objWs.CommandButton1.Caption ???
Zum Abfang: Jeder CmdBtn ist auch ein Shape, wie ich gestern festgestellt habe. In diesem Fall werden Blätter, die kein Shape namens "CommandButton1" haben, auch nicht geschützt. Kann man natürlich auch anders machen, so dass nur die Färbung und Benennung in der For..Each-Schleife stehen.
Herzlichen Gruß, Wolli


Sub Makro1()
Dim objWs As Worksheet, _
objSh As Shape, _
blnProtect As Boolean
blnProtect = Tabelle1.CommandButton1.Caption = "Alle Blätter schützen"
Application.ScreenUpdating = False
For Each objWs In ThisWorkbook.Worksheets
For Each objSh In objWs.Shapes
If objSh.Name = "CommandButton1" Then
If blnProtect Then
objWs.Protect
Worksheets(objWs.Name).CommandButton1.BackColor = &HC0C0&
Else
objWs.Unprotect
Worksheets(objWs.Name).CommandButton1.BackColor = &HFF&
End If
Worksheets(objWs.Name).CommandButton1.Caption = IIf(blnProtect, _
"Alle Blätter entschützen", "Alle Blätter schützen")
End If
Next objSh
Next objWs
Application.ScreenUpdating = True
End Sub


Anzeige
AW: Prüfen, ob's Commandbutton gibt
10.07.2007 17:03:36
schauan
Hallöchen,
hier mal ein paar Ansätze:


Sub test()
Dim objWs As Worksheet, objSh As Shape
For Each objWs In ThisWorkbook.Worksheets
For Each objSh In objWs.Shapes
If objSh.Name = "CommandButton1" Then _
MsgBox objSh.Name & " " & objSh.Parent.Name
MsgBox objWs.OLEObjects("CommandButton1").Name
Next
Next
End Sub


Hoffe geholfen zu haben Grüße von André aus Gera - Stadt der Buga 2007 - Excel-97-2003




Anzeige
AW: Prüfen, ob's Commandbutton gibt
10.07.2007 19:31:08
Dirk N.
Hallo euch allen,
@Gerd
Ich hatte letzte Nacht nur in meiner Beispielmappe getestet u. da fiel mir dieser Fehler nicht auf...
Beim Übertragen in die Originaldatei bemerkte ich den Fehler dann, aber ich vermutete die Ursache im Mappenschutz (den ich im Beispiel nicht drin hatte). Doch damit hat es lt. Wolli anscheinend nix zu tun...
@Wolli
Leider kann ich deine Frage nicht beantworten (s. mein Level), sorry.
Wie du selber schreibst, ändert sich der Blattschutz mit deinem zuletzt geposteten Code nur in den Blättern, die auch einen CommandButton1 beinhalten.
Gut, alternativ könnte ich ja nun in jedem Blatt einfach einen "Dummy" einfügen, aber dies wäre wohl eher eine "unbefriedigende" Lösung. Hilft dir evtl. André's Tipp weiter?
@André
Vielleicht führt dein Tipp ja zum Ziel, allerdings bin ich als VBA-Laie damit total überfordert...
Wenn du Lust u. Zeit hast, dann arbeite diesen Tipp doch bitte in Wollis Code ein (oder umgekehrt ?).
Vielen Dank für eure Hilfsbereitschaft u. bisherigen Tipps - wir nähern uns der Lösung mit großen Schritten !
MfG Dirk

Anzeige
AW: Prüfen, ob's Commandbutton gibt
10.07.2007 23:36:06
Gerd L
Guten Abend!
@ Wolli
Ich kann nur vermuten, dass das veränderbare Worksheetobjekt "objWs" den Klassenamen der Tabelle
nicht zurückgeben kann.
@ André
Auf eine Doppelschleife wollte ich gerne verzichten.
@ Dirk
Der folgende Code dürfte nur noch dann einen Error produzieren, falls in eine Tabelle irgend ein Shape,
aber kein Commandbutton1 eingefügt wird. Ich denke aber, dass Du mit dieser Einschränkung arbeiten
kannst.
Ich hoffe, jetzt die BackColors nicht vertauscht zu haben :-)


Sub Makro1()
Dim objWs As Worksheet, cbo As Object, blnProtect As Boolean
blnProtect = Tabelle1.CommandButton1.Caption = "Alle Blätter schützen"
Application.ScreenUpdating = False
For Each objWs In ThisWorkbook.Worksheets
If blnProtect = True Then
objWs.Protect
Else
objWs.Unprotect
End If
With Worksheets(objWs.Name)
If .Shapes.Count > 0 Then
Set cbo = .CommandButton1
If blnProtect = True Then
cbo.BackColor = &HC0C0&
cbo.Caption = "Alle Blätter entschützen"
Else
cbo.BackColor = &HFF&
cbo.Caption = "Alle Blätter schützen"
End If
End If
End With
Next
Application.ScreenUpdating = True
End Sub


Grüße Gerd

Anzeige
AW: Prüfen, ob's Commandbutton gibt
11.07.2007 05:54:20
schauan
Hallöchen,
wie ich schon geschrieben habe geht es direkt mit den objws.
Statt


Sub ...
With Worksheets(objWs.Name)
If .Shapes.Count > 0 Then
Set cbo = .CommandButton1
also
With objWs
und dann die Schleife
For Each objSh In objWs.Shapes
If objSh.Name = "CommandButton1" Then
Set cbo = objWs.OLEObjects("CommandButton1")
If blnProtect = True Then
cbo.BackColor = &HC0C0&
cbo.Caption = "Alle Blätter entschützen"
Else
cbo.BackColor = &HFF&
cbo.Caption = "Alle Blätter schützen"
End If
End If
Next
End With
End Sub


Ob Du die Anzahl der Shapes prüfen musst solltest Du mal testen. Ich würde darauf verzichten, Du siehst dann, warum.

Hoffe geholfen zu haben Grüße von André aus Gera - Stadt der Buga 2007 - Excel-97-2003




Anzeige
AW: Prüfen, ob's Commandbutton gibt
11.07.2007 20:09:52
schauan
Hallöchen,
der Vollständigkeit halber noch eine kleine Korrektur:


Sub ...
Dim objWs As Worksheet, cbo As Object, blnProtect As Boolean
For Each objWs In ThisWorkbook.Worksheets
With objWs
For Each objSh In objWs.Shapes
If objSh.Name = "CommandButton1" Then
Set cbo = objWs.OLEObjects("CommandButton1")
If blnProtect = True Then
cbo.Object.BackColor = &HC0C0&
cbo.Object.Caption = "Alle Blätter entschützen"
Else
cbo.Object.BackColor = &HFF&
cbo.Object.Caption = "Alle Blätter schützen"
End If
End If
Next
End With
Next
End Sub


Hoffe geholfen zu haben Grüße von André aus Gera - Stadt der Buga 2007 - Excel-97-2003




Anzeige
besser spät als NIE ;-)
15.07.2007 01:51:18
Dirk N.
Hallo Wolli, Gerd u. André,
bitte entschuldigt mein spätes Feedback.
Ich war überraschend einige Tage dienstlich unterwegs u. parallel dazu blieb andere wichtige Arbeit leider liegen...
Gestern abend konnte ich nun endlich die letzten Vorschläge testen:
Gerd, du hattest die Hintergrundfarben nicht vertauscht u. der Code tut's prima. Auch mit der Einschränkung (Error bei zukünftigen Shapes) hätte ich bestimmt leben können. Also besten Dank für deine Mühe u. die sehr guten Anregungen...
Allerdings hast du, André, mit deinem letzten Vorschlag einen Volltreffer gelandet. Da heute noch nicht absehbar ist, wie die Originalmappe zukünftig evtl. ausgebaut wird, habe ich diesen Code "eingebaut" u. es funktioniert wunderbar.
Allen Beteiligten möchte ich vielmals danken - nicht zuletzt auch für eure Geduld mit mir... ;-)
Euch allen noch einen schönen Sonntag !
MfG Dirk N.

Anzeige
;
Anzeige

Infobox / Tutorial

CommandButton in mehreren Blättern nutzen


Schritt-für-Schritt-Anleitung

Um einen CommandButton in mehreren Blättern einer Excel-Datei verfügbar zu machen, kannst du folgenden VBA-Code verwenden:

  1. Öffne den Visual Basic for Applications (VBA) Editor mit ALT + F11.
  2. Füge den folgenden Code in ein neues Modul ein:
Sub Makro1()
    Dim objWs As Worksheet, cbo As Object, blnProtect As Boolean
    blnProtect = Tabelle1.CommandButton1.Caption = "Alle Blätter schützen"
    Application.ScreenUpdating = False
    For Each objWs In ThisWorkbook.Worksheets
        If blnProtect = True Then
            objWs.Protect
        Else
            objWs.Unprotect
        End If
        With objWs
            If .OLEObjects.Count > 0 Then
                Set cbo = .OLEObjects("CommandButton1")
                If blnProtect = True Then
                    cbo.Object.BackColor = &HC0C0&
                    cbo.Object.Caption = "Alle Blätter entschützen"
                Else
                    cbo.Object.BackColor = &HFF&
                    cbo.Object.Caption = "Alle Blätter schützen"
                End If
            End If
        End With
    Next
    Application.ScreenUpdating = True
End Sub
  1. Ersetze Tabelle1 mit dem Namen des Blattes, in dem sich dein CommandButton befindet.
  2. Füge den CommandButton in jedes Blatt ein, in dem du ihn verwenden möchtest.

Häufige Fehler und Lösungen

  • Fehler: „Objekt nicht gefunden“

    • Lösung: Stelle sicher, dass der CommandButton den korrekten Namen hat. Im Code sollte CommandButton1 dem tatsächlichen Namen im Arbeitsblatt entsprechen.
  • Fehler: „Methode nicht gefunden“

    • Lösung: Vergewissere dich, dass der CommandButton als OLE-Objekt eingefügt wurde. Der Code funktioniert nicht mit Form Control Buttons.

Alternative Methoden

Eine alternative Methode besteht darin, eine benutzerdefinierte Symbolleiste zu erstellen, die den CommandButton enthält. Diese Methode hat den Vorteil, dass sie blattunabhängig ist. Du kannst den Button in einer benutzerdefinierten Symbolleiste platzieren, die immer sichtbar ist.

  1. Gehe zu Ansicht > Symbolleisten > Anpassen.
  2. Erstelle eine neue Symbolleiste und füge den CommandButton hinzu.
  3. Wechsle zu VBA und verwende den entsprechenden Code, um die Funktionalität des Buttons zu implementieren.

Praktische Beispiele

Hier ist ein Beispiel für einen CommandButton, der alle Blätter in einer Arbeitsmappe schützt oder entsperrt:

Private Sub CommandButton1_Click()
    Call Makro1
End Sub

In diesem Beispiel wird das Makro Makro1 aufgerufen, wenn der Button geklickt wird. Der Button ändert seine Farbe und Beschriftung je nach Schutzstatus der Blätter.


Tipps für Profis

  • Verwende Global Variablen: Wenn du den Status des CommandButton global speichern möchtest, kannst du Variablen außerhalb der Sub-Prozeduren definieren.
  • Fehlerbehandlung: Füge Error-Handling in deinen Code ein, um unerwartete Fehler abzufangen. Nutze On Error Resume Next, um sicherzustellen, dass der Code nicht abstürzt.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, wenn ich mehr als einen Button habe? Du kannst den Code leicht anpassen, indem du zusätzliche Bedingungen für jeden CommandButton hinzufügst und deren Namen im Code änderst.

2. Funktioniert dieser Code in Excel 365? Ja, der Code sollte in den meisten Excel-Versionen, einschließlich Excel 365, funktionieren. Achte darauf, dass die OLE-Objekte korrekt erstellt sind.

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