Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

ToggleButton1 in allen sheets "synchronisieren"
#1
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
Antworten Top
#2
Hallo,

hier ein Beispiel:

mfg


Angehängte Dateien
.xlsm   Captain Nemo Toggle.xlsm (Größe: 25,4 KB / Downloads: 9)
Antworten Top
#3
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")
Antworten Top
#4
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
Antworten Top
#5
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
Antworten Top
#6
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).
Antworten Top
#7
Funktioniert jetzt alles!

Dank dir!!!
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste