15.02.2018, 18:06 (Dieser Beitrag wurde zuletzt bearbeitet: 15.02.2018, 18:07 von CaptainNemo.)
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
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")
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.
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.
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).