BeforeClose CommandButton auf Ausgangsstellung
#1
Hi,

Habe den "CommandButton1" in allen Arbeitsblättern, mit beim Anklicken wechselnder Beschriftung ("Eingabe"/"Bearbeitung").

Sie sind zusammengeschaltet, so dass, wenn 1 Button geklickt wird, alle gedrückt sind. Bei "Bearbeitung" bleibt Excel im F2-Modus.

Was trage ich im BeforeClose-Code ein, dass die Buttons auf "Eingabe" gestellt werden? Analog zu ToggleButton1.Value = False wird wohl nicht funktionieren?
Verschiedene Versuche mit CommandButton1.Caption = "Eingabe" brachten keinen Erfolg.

Gruß
Uwe

In den Arbeitsblättern:

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
Top
#2
Hallo Uwe,

im BeforeClose wird das aber nicht immer was nutzen, oder?

Wäre da nicht BeforeSave angebrachter? Allerdings würde das dem Anwender eventuell nicht gefallen, wenn er zwischendurch speichert.

Bliebe noch, beim Öffnen der Datei einen Anfangswert zu setzen, oder? Allerdings kommt der auch nicht, wenn beim Öffnen die Makros deaktiviert werden. Aber dann geht ja auch anderes nicht ;-(
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Hi, im Workbook_Open hab ich's auch probiert... Sad

Wie müsste die Zeile denn aussehen?
Top
#4
Hallöchen,

Du musst dem Makro auch den Ort des CommandButtons mitgeben. Wenn wirklich auf jedem Blatt ein CommandButton1 existiert - und kein Diagrammblatt, dann könnte das so aussehen. Wenn nicht, brauchst Du weitere Bedingungen oder eine Fehlerbehandlung oder ... Dein Code schaltet allerdings die Beschriftung auf den anderen Zustand. Es reicht, wenn Du nur die gewünschte Caption programmierst, also nur blaetter.CommandButton1.Caption = "Eingabe". Ich habe unten Deine Originalzeile drin.

Code:
Private Sub Workbook_Open()
For Each blaetter In ThisWorkbook.Sheets
   blaetter.CommandButton1.Caption = IIf(blaetter.CommandButton1.Caption = "Bearbeitung", "Eingabe", "Bearbeitung")
Next
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#5
Ich habe beide Varianten probiert.

Der einzige Unterschied zu vorher ist, dass nach Dateiöffnung der Button im ersten Tabellenblatt auf Eingabe steht. In den anderen Blättern auf Bearbeitung. Wechselt man dann wieder ins erste Blatt, steht der Button dann auch auf Bearbeitung. Was könnten weitere Bedingungen sein?
Top
#6
Moin
kann sein, dass ich mich irre, und das Hirn noch nicht ganz wach.
Ist die Iif- Funktion nicht zu verstehen wie If-Then-Else ?
Dann lese ich aus dem Befehl :
Wenn "Bearbeitung" dann "Eingabe" (ok) sonst "Bearbeitung" (also wenn er auf "Eingabe" steht dann "Bearbeitung" ???)

Ansonsten wünsch ich ein schönes Frühstück mit viel Kaffee

Igel
Ich kann nicht alles wissen,
aber vieles lernen ! 19
Top
#7
Hatte bis jetzt 1 Tasse, danke.

Zumindest ist dein Hirn VBA-mäßig wacher als meins.

Wie müsste die Zeile mit der IIf-Funktion dann aussehen, wenn der Button beim Öffnen der Datei von "Bearbeitung" auf "Eingabe" switchen soll? Mit

Code:
Private Sub Workbook_Open()
For Each blaetter In ThisWorkbook.Sheets
  blaetter.CommandButton1.Caption = IIf(blaetter.CommandButton1.Caption = "Bearbeitung", "Eingabe", "Bearbeitung")
Next
End Sub


hat's leider nicht funktioniert. Übrigens auch nicht wenn man "Bearbeitung" und "Eingabe" vertauscht. Trotzdem verhält sich der Button im aktiven Blatt wie oben beschrieben. Die anderen CommandButton1-Buttons reagieren überhaupt nicht. Anscheinend versteht Excel nicht, dass ALLE Blätter gemeint sind. Oder?

Jetzt hole ich mir erst ne 2. Tasse!!
Top
#8
Hi,

vielleicht so?
Code:
blaetter.CommandButton1.Caption = IIf(blaetter.CommandButton1.Caption = "Bearbeitung", "Eingabe", "Eingabe")

ungetestet!
Top
#9
Hab's direkt probiert. Immer dasselbe Ergebnis, seltsamerweise!

Wahrscheinlich würde
blaetter.CommandButton1.Caption = "Eingabe"
reichen, aber Excel setzt halt nur den Button im beim Öffnen aktiven Blatt auf "Eingabe" und geht nicht alle Blätter durch. Geht man, wie gesagt, dann wieder in das erste Blatt, switcht er wieder auf "Bearbeitung".

Code:
Private Sub Workbook_Open()
For Each blaetter In ThisWorkbook.Sheets
  blaetter.CommandButton1.Caption = "Eingabe"
Next
End Sub
Top
#10
Hallo,
ThisWorkbook.Names("T_1").Comment
"geistert" vermutlich unverändert in Deinen Codes herum?

Welche gravierenden Nachteile hatte denn die Userformvariante?

Gruß Uwe
Top


Gehe zu:


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