Hintergrundfarbe ändern, aktuelle Zelle hervorheben, unterschiedliche Farben (Excel 2019)

  • Excel

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

    Hintergrundfarbe ändern, aktuelle Zelle hervorheben, unterschiedliche Farben (Excel 2019)

    Hallo zusammen,

    habe für einen Freund folgende Lösung geschrieben (ist eine Art Tätigkeitsbericht mit 6 Bereichen). Jeder Bereich ist unterschiedlich breit und durch verschiedene Farben von einander getrennt.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Reihe As Integer
    2. Public Spalte As Integer
    3. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    4. ' Exit Sub
    5. Dim AktuellerTag As Integer
    6. Dim Markierungsfarbe As Integer
    7. Dim Neutral As Integer
    8. Dim Morgens As Integer
    9. Dim Nachmittags As Integer
    10. Dim Abends As Integer
    11. Dim Haushaltsdame As Integer
    12. Dim Sonstges As Integer
    13. ' Einige Werte festlegen bzw. aktuell ermitteln
    14. AktuellerTag = 33
    15. Markierungsfarbe = 50
    16. Neutral = 0 ' Weiss
    17. Morgens = Range("D1").Interior.ColorIndex ' Orange
    18. Nachmittags = Range("M1").Interior.ColorIndex ' Hellgrün
    19. Abends = Range("Q1").Interior.ColorIndex ' Hellblau
    20. Haushaltsdame = Range("Y1").Interior.ColorIndex ' Grün Akzent 6, heller 60%
    21. Sonstges = Range("AF1").Interior.ColorIndex ' Orange Akzent 2, heller 60%
    22. Reihe = ActiveCell.Row
    23. Spalte = ActiveCell.Column
    24. ' Wenn die Überschriftenzeile überschritten wird nach oben, dann nichts unternehmen
    25. If Reihe < 3 Or Spalte < 3 Then
    26. Exit Sub
    27. End If
    28. ' Die Zeilen einfärben
    29. ' Spalte 1 - 3
    30. Call Grundfarben_einstellen(1, 3, Neutral)
    31. ' Spalte 4 - 12
    32. Call Grundfarben_einstellen(4, 12, Morgens)
    33. ' Spalte 13 - 16
    34. Call Grundfarben_einstellen(13, 16, Nachmittags)
    35. ' Spalte 17 - 24
    36. Call Grundfarben_einstellen(17, 24, Abends)
    37. ' Spalte 25 - 31
    38. Call Grundfarben_einstellen(25, 31, Haushaltsdame)
    39. ' Spalte 32 - 35
    40. Call Grundfarben_einstellen(32, 35, Sonstges)
    41. ' Spalte 36 - 256
    42. Call Grundfarben_einstellen(36, 256, Neutral)
    43. ' Aktuelle Zelle markieren
    44. Range(Cells(Reihe, 1), Cells(Reihe, 1)).Interior.ColorIndex = AktuellerTag
    45. Range(Cells(Reihe, Spalte), Cells(Reihe, Spalte)).Interior.ColorIndex = Markierungsfarbe
    46. End Sub
    47. Public Sub Grundfarben_einstellen(Anfang As Integer, Ende As Integer, Farbe As Integer)
    48. ' Generell die aktuelle Reihe, drüber und drunter wieder auf Standard stellen
    49. If Reihe > 1 Then
    50. Range(Cells(Reihe - 1, Anfang), Cells(Reihe - 1, Ende)).Interior.ColorIndex = Farbe
    51. End If
    52. Range(Cells(Reihe, Anfang), Cells(Reihe, Ende)).Interior.ColorIndex = Farbe
    53. Range(Cells(Reihe + 1, Anfang), Cells(Reihe + 1, Ende)).Interior.ColorIndex = Farbe
    54. End Sub


    Hiermit kann man ab dem Bereich C3 schön sehen, wo sich die aktuelle Zelle befindet.
    (Ja, wenn man mehre Zellen mit der Maus markiert funktioniert dies nicht und bei anspringen mit der Maus bleiben auch die alten Markierungen sichtbar)
    Mein Freund soll aber sich mit den Pfeiltasten von Zelle zu Zelle sich bewegen und dann funktioniert meine Lösung soweit ganz gut.

    Was ich aber nicht verstehe bzw. ich ein kleines optisches Problem habe ist folgendes:
    Wie man sieht hole ich die aktuelle Hintergrundfarbe der einzelnen Spaltenbereiche aus den jeweiligen ersten Zeilen. Damit kann ich mal eben schnell die Optik anpassen. Das Einfärbe mache ich ganz normal mit der Füllfarbe im Reiter Start, Schriftart.
    Wenn ich jetzt aber meinen Code benutze, dann werden leicht andere Werte eingestellt.

    Kennt jemand hier die Lösung bzw. kann mir erklären, warum das so ist?

    Gruß

    Volker
    Hallo Zusammen,

    so, habe es gerade doch noch selbst hinbekommen.

    Hier noch die verbesserte Lösung. In Zelle A1 kann jetzt die Hintergrundfarbe für den aktuellen Tag hinterlegt werden und in B1 kann die Zelle so formatiert werden, wie die aktuelle Zelle aussehen soll. Hintergrundfarbe, Schriftgröße und Schriftfarbe werden übernommen. D2 ist für den normalen Zustand zuständig.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Reihe As Double
    2. Public Spalte As Double
    3. Public AktuellerTag As Double
    4. Public MarkierungsHintergrundfarbe As Double
    5. Public MarkierungsTextfarbeAktuell As Double
    6. Public MarkierungsTextfarbeStandard As Double
    7. Public MarkierungsTextSchriftgroesseAktuell As Integer
    8. Public MarkierungsTextSchriftgroesseStandard As Integer
    9. Public Neutral As Double
    10. Public Morgens As Double
    11. Public Nachmittags As Double
    12. Public Abends As Double
    13. Public Haushaltsdame As Double
    14. Public Sonstges As Double
    15. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    16. ' Einige Werte festlegen bzw. aktuell ermitteln
    17. AktuellerTag = Range("A1").Interior.Color
    18. MarkierungsHintergrundfarbe = Range("B1").Interior.Color
    19. MarkierungsTextfarbeAktuell = Range("B1").Font.Color
    20. MarkierungsTextfarbeStandard = Range("D1").Font.Color
    21. MarkierungsTextSchriftgroesseAktuell = Range("B1").Font.Size
    22. MarkierungsTextSchriftgroesseStandard = Range("D2").Font.Size
    23. Neutral = Range("A2").Interior.Color
    24. Morgens = Range("D1").Interior.Color
    25. Nachmittags = Range("M1").Interior.Color
    26. Abends = Range("Q1").Interior.Color
    27. Haushaltsdame = Range("Y1").Interior.Color
    28. Sonstges = Range("AF1").Interior.Color
    29. Reihe = ActiveCell.Row
    30. Spalte = ActiveCell.Column
    31. ' Wenn die Überschriftenzeile überschritten wird nach oben, dann nichts unternehmen
    32. If Reihe < 3 Or Spalte < 3 Or Range(Cells(Reihe, 1), Cells(Reihe, 1)).Value = "" Then
    33. Exit Sub
    34. End If
    35. ' Generell die aktuelle Reihe, die drüber und drunter normal
    36. ' Spalte 1 - 3
    37. Call Grundfarben_einstellen(1, 3, Neutral)
    38. ' Spalte 4 - 12
    39. Call Grundfarben_einstellen(4, 12, Morgens)
    40. ' Spalte 13 - 16
    41. Call Grundfarben_einstellen(13, 16, Nachmittags)
    42. ' Spalte 17 - 24
    43. Call Grundfarben_einstellen(17, 24, Abends)
    44. ' Spalte 25 - 31
    45. Call Grundfarben_einstellen(25, 31, Haushaltsdame)
    46. ' Spalte 32 - 35
    47. Call Grundfarben_einstellen(32, 35, Sonstges)
    48. ' Spalte 36 - 256
    49. Call Grundfarben_einstellen(36, 256, Neutral)
    50. ' Aktuelle Zelle markieren
    51. Range(Cells(Reihe, 1), Cells(Reihe, 1)).Interior.Color = AktuellerTag
    52. Range(Cells(Reihe, Spalte), Cells(Reihe, Spalte)).Interior.Color = MarkierungsHintergrundfarbe
    53. Range(Cells(Reihe, Spalte), Cells(Reihe, Spalte)).Font.Color = MarkierungsTextfarbeAktuell
    54. Range(Cells(Reihe, Spalte), Cells(Reihe, Spalte)).Font.Size = MarkierungsTextSchriftgroesseAktuell
    55. End Sub
    56. Public Sub Grundfarben_einstellen(Anfang As Double, Ende As Double, Farbe As Double)
    57. If Reihe > 1 Then
    58. Range(Cells(Reihe - 1, Anfang), Cells(Reihe - 1, Ende)).Interior.Color = Farbe
    59. Range(Cells(Reihe - 1, Anfang), Cells(Reihe - 1, Ende)).Font.Color = MarkierungsTextfarbeStandard
    60. Range(Cells(Reihe - 1, Anfang), Cells(Reihe - 1, Ende)).Font.Size = MarkierungsTextSchriftgroesseStandard
    61. End If
    62. Range(Cells(Reihe, Anfang), Cells(Reihe, Ende)).Interior.Color = Farbe
    63. Range(Cells(Reihe, Anfang), Cells(Reihe, Ende)).Font.Color = MarkierungsTextfarbeStandard
    64. Range(Cells(Reihe, Anfang), Cells(Reihe, Ende)).Font.Size = MarkierungsTextSchriftgroesseStandard
    65. Range(Cells(Reihe + 1, Anfang), Cells(Reihe + 1, Ende)).Interior.Color = Farbe
    66. Range(Cells(Reihe + 1, Anfang), Cells(Reihe + 1, Ende)).Font.Color = MarkierungsTextfarbeStandard
    67. Range(Cells(Reihe + 1, Anfang), Cells(Reihe + 1, Ende)).Font.Size = MarkierungsTextSchriftgroesseStandard
    68. End Sub


    Gruß

    Volker