Clever-Excel-Forum

Normale Version: BeforeClose CommandButton auf Ausgangsstellung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4
Mein PC ist "down" und in OO/LO kann ich zwar die Code sehen, aber nicht testen.

Versuche es so:


Code:
####### Workbook ###########
Private Sub Workbook_Open()
   For Each blaetter In ThisWorkbook.Sheets
   blaetter.CommandButton1.Caption = "Eingabe"
   Next
ThisWorkbook.Names("T_1").Comment = "Eingabe"
End Sub

####### Sheet ########
Private Sub CommandButton1_Click()
   CommandButton1.Caption = IIf(CommandButton1.Caption = "Eingabe", "Bearbeitung", "Eingabe")
   ThisWorkbook.Names("T_1").Comment = CommandButton1.Caption
End Sub



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

(24.02.2018, 13:13)CaptainNemo schrieb: [ -> ]Der Hund liegt sicher in der Verknüpfung der Buttons begraben.

eher in der fehlerhaften Verwendung von Ereignissen. Was glaubst Du denn, was dieses Ereignis

(24.02.2018, 13:13)CaptainNemo schrieb: [ -> ]
Code:
Private Sub Worksheet_Activate()
   CommandButton1.Caption = ThisWorkbook.Names("T_1").Comment
End Sub

macht, wenn Du die Datei öffnest und ein anderes Tabellenblatt auswählst?
@Fennek: Alter, GEIL!!!

Für alle, die genauso bis zur Bescheuertheit detailversessen sind wie ich und ebenfalls begrenzte VBA-Möglichkeiten haben,
hier zusammengefasst die Codes, inklusive des Makros (SendKeys), weshalb der ganze Aufwand betrieben wurde:

Im Codefenster "Diese Arbeitsmappe":

Code:
Private Sub Workbook_Open()
   For Each blaetter In ThisWorkbook.Sheets         ' Code
   blaetter.CommandButton1.Caption = "Eingabe"      ' Buttons
   ThisWorkbook.Names("T_1").Comment = "Eingabe"    ' auf Ausgangszustand zurücksetzen
   Next
End Sub

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

In den Codefenstern der Arbeitsblätter:   Zusammenschalten aller CommandButton1-Buttons in den Arbeitsblättern

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

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

Um den Namen zu schreiben, muss zunächst dieses Makro einmal von Hand gestartet werden:   (Z.B. von einem allgemeinen Modul aus.)

Code:
Sub T_1()
   Debug.Print ActiveSheet.OLEObjects("CommandButton1").Object.Value, ActiveSheet.OLEObjects("CommandButton1").Object.Caption
   ThisWorkbook.Names.Add "T_1", "_", False
End Sub
Ergänzung: Im Falle einer "Option Explicit"-Anweisung in "Diese Arbeitsmappe" nach "Private Sub Workbook_Open()" die Zeile

Code:
    Dim Blaetter As Variant

einfügen. Sonst gibt's eine Fehlermeldung.

Bitte Zeile bestätigen/korrigieren.

Danke.
Uwe
Hallo Uwe,

ein kleiner Hinweis. Du solltest hier vielleicht ein besser passenden Variablentyp verwenden. Und zwar

Code:
Dim Blaetter As Sheets

bezogen auf deinen Beispielcode.
Oh Mann, da hätt' ich sogar glatt selber drauf kommen können.

Vielen Dank!
Uwe
Kommando zurück.

Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden.

Markiert wird:
Blaetter.CommandButton1.Caption = "Eingabe"

Mit Variant motzt er nicht. Huh

Hätte es auch eher andersrum erwartet.
Hallo Uwe,

(25.02.2018, 00:44)CaptainNemo schrieb: [ -> ]Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden.

stimmt, Du hast Recht: Es kommt eine Fehlermeldung  :s

Wenn Du aber anstelle des übergeordneten Sheet-Objekt das Worksheet-Objekt nimmst, sollte es funktionieren.

Code:
Private Sub Workbook_Open()
  Dim blaetter As Worksheet
 
  For Each blaetter In ThisWorkbook.Worksheets         ' Code (geändert)
     blaetter.CommandButton1.Caption = "Eingabe"      ' Buttons
     ThisWorkbook.Names("T_1").Comment = "Eingabe"    ' auf Ausgangszustand zurücksetzen
  Next
End Sub
Hallöchen,

der Punkt ist, dass Worksheet sich auf eins bezieht und Sheets auf alle Blätter des Workbooks, übrigens typunabhängig.

Es geht dann auch

Dim blaetter As Worksheet
For Each blaetter In Sheets

mit der von mir in #4 beschriebenen Einschränkung oder man benutzt eben gleich die Workseets-Auflistung wie von Steffl beschrieben bzw. kürzer, wenn man sich im richtigen Workbook befindet Smile
...
For Each blaetter In Worksheets
...
Hallo André und Stefan,

die in #27 genannte Fehlermeldung kommt trotzdem.

(25.02.2018, 10:44)schauan schrieb: [ -> ]Es geht dann auch

Dim blaetter As Worksheet
For Each blaetter In Sheets

lieber nicht, denn es gibt nicht nur Worksheets. Wink

Gruß Uwe
Seiten: 1 2 3 4