Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
884to888
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
884to888
884to888
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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.

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

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

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.

162 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige