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.
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
...
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.
Gruß Uwe