Lass mich raten…
Das direkte Setzen auf True löst den Code des Buttons selbst aus, stimmts? Setze in Activate/Initialize (am besten in beiden - und noch besser im Code zu dem Button selbst) mal einen Haltepunkt und dann die UserForm in Gang. Gehe mit F8 schrittweise vorwärts. Dann Schalte mal um und um und um…, schließe die UserForm, öffne sie wieder und beobachte.
Ich + UserForm = Hassliebe.
Mir ist selten eine Hiuntergrund-Unlogik beim Umgang mit Ereignissen begegnet wie da. Ein Initialisieren darf keine Schaltfunktion auslösen, ein Verlassen eines Eingabefeldes nicht auch noch das Ändern-Ereignis… Wozu gibt es Initialisieren und Explizit Verlassen und Ändern??
Zum Code:
Private Sub ToggleButton2008_Click()
Columns("R:U").EntireColumn.Hidden = Not Columns("R:U").EntireColumn.Hidden
…
Das taugt nicht - und ich ärgere mich auch selbst darüber.
Um das Wasserdicht zu machen musst du den Status des Buttons UND den der Columns pürfen - um Inkosistenzen abzufangen. Ob nun die Columns den Ausschlag geben oder der Button [man kann ja die Beschriftung frisieren hier…] - das ist bei dir.
If ToggleButton2008 = True Then
Columns("R:U").EntireColumn.Hidden = True 'oder andersrum?!
ToggleButton2008.Caption = "Anzeigen"
Else
Columns("R:U").EntireColumn.Hidden = Flasee
ToggleButton2008.Caption = "Verbergen"
End If
Als eine Idee dazu.
Private Sub UserForm_Activate()
If Columns("R:U").EntireColumn.Hidden = True Then
ToggleButton2008.Value = False
Else
ToggleButton2008.Value = True
end if
Man könnte auch…
ToggleButton2008.Value = Not(Columns("R:U").EntireColumn.Hidden)
…schreiben. Aber dann müsste man ja z.B. wieder per IF an der Beschriftung fummeln.
Die Verwendung der Zelle 1|255 (IV1) als Parkplatz für eine Status dürfte eine Zelle sein die keiner sieht und an der keiner rumbastelt. Pessimisten nehmen da weiße Schrift auf weißem Grund…
Eric March