Clever-Excel-Forum

Normale Version: ToggleButton1 in allen sheets "synchronisieren"
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi,

wie kriege ich die ToggleButtons synchronisiert, bzw. so hin, dass sie wie EIN Button reagieren?

Der ToggleButton1 befindet sich in allen sheets. Ideal wäre, wenn man Tabellenblätter kopieren und im selben Workbook einfügen könnte, ohne dass der Code verändert werden muss.

Ich habe es auch schon mit einer nicht-modalen Userform probiert, aber die Nachteile waren zu groß.

Im Modul "Diese Arbeitsmappe":
Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.OLEObjects("ToggleButton1").Object.Caption = "Bearbeitung" Then
       On Error GoTo ChgEvent_Error
           SendKeys "{F2}"
ChgEvent_Error:
       Application.EnableEvents = True
   End If
End Sub

In den Modulen der Arbeitsblätter:
Code:
Private Sub ToggleButton1_Click()
   If ToggleButton1.Caption = "Eingabe" Then
       ToggleButton1.Caption = "Bearbeitung"
   Else
       ToggleButton1.Caption = "Eingabe"
   End If
End Sub
Hallo,

hier ein Beispiel:

mfg
Hallo Nemo,

eben ging das Telefon, da habe ich etwas überhastet auf "senden" gedrückt.

Das Beispiel ist auf viele Seiten übertragbar, aber beachte, dass der Namen zuerst angelegt werden muss. Auf allen Seiten muss es "ToggleButton1" heisen.

mfg

(deinen Code fand ich nicht so gut, insbesondere das "sendKeys")
Vielen Dank,

aber die Buttons in deiner Beispieldatei reagieren auf meinem Rechner (Excel 2016) auch nicht gemeinsam. Eigentlich ist es der auf der Arbeit, bin Pädagoge und habe fast nur in meinen Nachtbereitschaften Zeit und Gelegenheit die Datei weiterzuentwickeln, daher kommen meine Antworten oft so spät.

Was meinst du mit "Namen zuerst anlegen"? Zuerst die Buttons, oder die Codes? Beide Varianten haben allerdings bisher nicht funktioniert. Mache ich etwas falsch? In das Modul "diese Arbeitsmappe" kommt gar nix?

Wenn ich testweise auf einen Button klicke, taucht das Debug-Fenster auf und beim debuggen wird die Zeile "ThisWorkbook.Names("T_1").Comment = ToggleButton1.Caption" markiert.

Wieso findest du den "SendKeys-Code" nicht gut?

Gruß
Uwe
Hallo,

diese Sub-Routine muss zuerst einmal gelaufen sein. Bei der genannten Fehlermeldung für die "Sub" einmal von Hand aus:


Code:
Sub T_1()
   Debug.Print ActiveSheet.OLEObjects("Togglebutton1").Object.Value, ActiveSheet.OLEObjects("Togglebutton1").Object.Caption
    ThisWorkbook.Names.Add "T_1", "_", False
End Sub


Damit wird der Name "T_1" angelegt, indem der Zustand des Toggle-Buttons gespeichert und übertragen wird.

mfg
Das ist quasi ein Initialisierungs-Code, oder? Danach kann man ihn löschen, jedenfalls funktioniert es auch ohne ihn.

Kleiner Schönheitsfehler: Die Beschriftung (Caption) ändert sich auch bei den Buttons in den nichtaktiven Sheets, nicht aber der (optische) Zustand (gedrückt/nicht gedrückt) *.

Großer "Schönheits"fehler: Mein SendKeys-Code funktioniert nicht mehr.

Wenn ich nur mehr Ahnung hätte...!

* Ich hab deinen Code jetzt auf CommandButtons angewandt. Funktioniert genauso, die Beschriftung ("Eingabe"/"Bearbeitung") wechselt auf allen Buttons, wenn man einen anklickt.

Aktueller Stand:
Code:
Private Sub CommandButton1_Click()
    CommandButton1.Caption = IIf(CommandButton1.Caption = "Bearbeitung", "Eingabe", "Bearbeitung")
    ThisWorkbook.Names("T_1").Comment = CommandButton1.Caption
End Sub

Private Sub Worksheet_Activate()
    CommandButton1.Caption = ThisWorkbook.Names("T_1").Comment
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.OLEObjects("CommandButton1").Object.Caption = "Bearbeitung" Then
           SendKeys "{F2}"
   End If
End Sub

Der SendKeys-Code wird leider ignoriert. Warum nur? Der funktionierte in der Vergangenheit immer einwandfrei (in etwas veränderter Form, die hier aber auch nicht gefunzt hat).
Funktioniert jetzt alles!

Dank dir!!!