Mehrere Button eine Funktion Farbwechsel mit Speicherung

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von TeamBob.

    Mehrere Button eine Funktion Farbwechsel mit Speicherung

    Hallo

    Ich habe in einen Userform mehrere Button (ca. 20 Stück) welche als Status-Button dienen sollen.
    Die Button können dabei 3 Farben annehmen, welche jeweils durch ein Button-Click verändert werden.
    (Grüne Button/Rot/Gelb).
    Ich habe das soweit mit einen Klassenmodul gelöst um nicht für alle Button eine Funktion zu definieren.
    Jetzt habe ich 2 Probleme:

    1. Der Status (Farbe) jedes einzelnen Button müsste in einem Sheet gespeichert werden, das sich nach dem öffnen
    der Arbeitsmappe die einzelnen Button-Status (Farben) wieder laden und nicht alle wieder grün sind.
    Wenn also beispielsweise 5 Button grün sind, 10 Gelb und 5 Rot und ich schließe die Excel, dann sollte nach dem Öffnen
    genau diese Button wieder diese Farbe haben wie beim Schließen.
    Ich könnte natürlich im Modul eine extra Button-Speicher-Funktion anlegen, wo die Farbe jedes Buttons einzeln abgespeichert wird
    und dann wieder das gleiche als Lade-Funktion, aber das wäre glaube ich wenig elegant.
    Hatte gedacht dies in der Schleife mit einzubinden die mein Click Ereignis abgerufen wird, das der veränderte Button in dem zugehörigen Sheet
    gespeichert wird, jedoch muss beachtet werden, dass jeder Button eine Zelle bekommt.
    Gibt es hier Lösungsansätze?

    2. Weiterhin ist das Problem das die Funktion für wirklich alle Button Userform gilt. Lassen sich hier bestimmte Button rausnehmen oder
    dies abhängig von Namen machen, das es nur für Button gilt die auch CommandButton1.... heißen?

    Danke


    Visual Basic-Quellcode

    1. 'Klassenmodul
    2. Option Explicit
    3. Public WithEvents cmd As MSForms.CommandButton
    4. Private Sub cmd_Click()
    5. If cmd.BackColor = &HC000& Then
    6. cmd.BackColor = &HFFFF&
    7. Else
    8. If cmd.BackColor = &HFFFF& Then
    9. cmd.BackColor = &HFF&
    10. Else
    11. cmd.BackColor = &HC000&
    12. End If
    13. End If
    14. End Sub
    15. 'Userform
    16. Private Sub UserForm_Initialize()
    17. 'Status Button ändern
    18. Dim ctrl As MSForms.Control
    19. Dim CmdBtn As clsCmdBtn
    20. Set colButtons = New Collection
    21. For Each ctrl In Me.Controls
    22. If TypeOf ctrl Is MSForms.CommandButton Then
    23. Set CmdBtn = New clsCmdBtn
    24. Set CmdBtn.cmd = ctrl
    25. colButtons.Add CmdBtn
    26. End If
    27. Next ctrl
    28. End Sub
    29. Private Sub UserForm_Terminate()
    30. Dim c As clsCmdBtn
    31. For Each c In colButtons
    32. Set c.cmd = Nothing
    33. Set c = Nothing
    34. Next c
    35. Set colButtons = Nothing
    36. End Sub