Bedingte Formatierung und VBA

  • Excel

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

Es gibt 34 Antworten in diesem Thema. Der letzte Beitrag () ist von Sam85.

    Bedingte Formatierung und VBA

    Hallo,

    ich versuche mich gerade daran, eine bedingte Formatierung als VBA zu implementieren.
    Wie muss ich da vorgehen, um diese Formel einzubinden.

    VB.NET-Quellcode

    1. =WENN(INDEX(Arbeitszeit!$B$2:$F$26;VERGLEICH(RUNDEN($A6;2);RUNDEN(Arbeitszeit!$A$2:$A$26;2);0);VERGLEICH(B$5;Arbeitszeit!$B$1:$F$1;0))=0;WAHR;FALSCH)
    Dateien
    • 2017 -upload.zip

      (185,24 kB, 13 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sam85“ ()

    ich hatte jetzt mal den Makrorecorder dazu gezogen und dann kam das raus...
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Sub BFG()
    2. Range("B6").Select
    3. Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    4. "=WENN(INDEX(Arbeitszeit!$B$2:$F$26;VERGLEICH(RUNDEN($A6;2);RUNDEN(Arbeitszeit!$A$2:$A$26;2);0);VERGLEICH(B$5;Arbeitszeit!$B$1:$F$1;0))=0;WAHR;FALSCH)"
    5. Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    6. With Selection.FormatConditions(1).Interior
    7. .PatternColorIndex = xlAutomatic
    8. .ThemeColor = xlThemeColorLight1
    9. .TintAndShade = 0.14996795556505
    10. End With
    11. Selection.FormatConditions(1).StopIfTrue = False
    12. Application.CutCopyMode = False
    13. End Sub


    und das habe ich dann versucht umzusetzen...nur irgendwas mach ich falsch...welche Befehle aus dem Rekorder sind absolut notwendig und welche nicht? Und warum wird nur ein Arbeitsblatt angesprochen, wenn ich den Befehl in Diese Arbeitsmappe setze?

    VB.NET-Quellcode

    1. Option Explicit
    2. Dim wks As Worksheet, cntCol As Integer, cntRow As Integer
    3. Sub Color()
    4. For Each wks In Worksheets
    5. If Left(wks.Name, 4) = Right(frmMain.tb_workbook.Text, 4) Then
    6. With Selection.FormatConditions
    7. .Add Type:=xlExpression, Formula1:="=WENN(INDEX(Arbeitszeit!$B$2:$F$26;VERGLEICH(RUNDEN($A6;4);RUNDEN(Arbeitszeit!$A$2:$A$26;4);0);VERGLEICH(B$5;Arbeitszeit!$B$1:$F$1;0))=0;WAHR;FALSCH)"
    8. End With
    9. With Selection.FormatConditions(1).Interior
    10. .PatternColorIndex = xlAutomatic
    11. .ThemeColor = xlThemeColorLight1
    12. .TintAndShade = 0.14996795556505
    13. End With
    14. End If
    15. Next
    16. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Sam85“ ()

    1. In welchem Sheet bist Du?
    2. Was soll die Formel bewirken?
    3. Was soll folgender Teil, der wohl (auch) das Problem ist, darstelen: RUNDEN(Arbeitszeit!$A$2:$A$26;2)? Runde einen Bereich? Kommt bei mir: Fehler.

    EDIT:
    Weil Du auch erstmal das entsprechende Sheet aktivieren musst, oder einen Sheetbezug in die Formel einbauen musst, sonst wird der Code immer nur mit dem einen, aktiven Sheet ausgeführt.
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    1. es soll am Ende auf alle Kalender Sheets wirken, bin gerade auf Januar.
    2. Die Formel soll die Felder im Kalender färben, die im Arbeitsblatt Arbeitszeit eine 0 stehen haben.
    3. Das Runden löst ein Problem das beim Index Vergleich mit der Uhrzeit erzeugt wurde. Die Formel funktioniert auch (nicht exakt aber für den Zweck schien mir ausreichen) :) das hab ich getestet, nun will ich es auf alle Kalender automatisch anwenden.

    EDIT: Damit? Da hab ich es eingetragen, reagiert aber nur auf das erste Arbeitsblatt also Januar. käse... X/

    VB.NET-Quellcode

    1. Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Sam85“ ()

    Excel sagt für die bedingte Formatierung: "Werte formatieren, für die diese Regel wahr ist" => man braucht gar keine WENN-Geschichte mehr, sondern nur ein: =INDEX(Arbeitszeit!$B$2:$F$26;VERGLEICH(RUNDEN($A6;2);RUNDEN(Arbeitszeit!$A$2:$A$26;2);0);VERGLEICH(B$5;Arbeitszeit!$B$1:$F$1;0))=0
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Ich komme dennoch nicht zu der Funktion, dass alle Arbeitsblätter angesprochen werden.
    hier kommt mir die Fehlermeldung... ?(

    Quellcode

    1. wks.Range("B6").Select


    VB.NET-Quellcode

    1. Option Explicit
    2. Dim wks As Worksheet, cntCol As Integer, cntRow As Integer
    3. Sub Color()
    4. For Each wks In Worksheets
    5. If Left(wks.Name, 4) = Right(frmMain.tb_workbook.Text, 4) Then
    6. wks.Range("B6").Select
    7. Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=INDEX(Arbeitszeit!$B$2:$F$26;VERGLEICH(RUNDEN($A6;4);RUNDEN(Arbeitszeit!$A$2:$A$26;4);0);VERGLEICH(B$5;Arbeitszeit!$B$1:$F$1;0))=0"
    8. Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    9. With Selection.FormatConditions(1).Interior
    10. .PatternColorIndex = xlAutomatic
    11. .ThemeColor = xlThemeColorLight1
    12. .TintAndShade = 0.14996795556505
    13. End With
    14. Selection.FormatConditions(1).StopIfTrue = False
    15. Application.CutCopyMode = False
    16. End If
    17. Next
    18. End Sub
    Grundsätzlich reicht es, in Zeile 7 ein wks.Select noch einzufügen (als Extrazeile). Ich krieg zwar die Formel immer noch nicht recht zum Laufen, aber sie wird mit dem so abgewandelten Code zumindest mal in alle Zielzellen jedes passenden Sheets hinterlegt.
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Hallo,

    ich hab es nun bis hierhin geschafft und zumindest kommt keine Fehlermeldung...aber die Farbe kommt irgendwie nicht mit. In den bedingten Formatierungen ist es drin aber ohne Farbe. Hab ich die Farbe falsch gesetzt?
    EDIT:
    Scheinbar habe ich mich geirrt. Damit klappt es auch nicht mit der Formelübertragung auf alle Arbeitsblätter. X/

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Workbook_SheetActivate(ByVal sh As Object)
    2. If Left(ActiveSheet.Name, 4) = Right(frmMain.tb_workbook.Text, 4) Then Call Color
    3. End Sub



    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Explicit
    2. Dim wks As Worksheet, cntCol As Long, cntRow As Long
    3. Sub Color()
    4. Set wks = ThisWorkbook.ActiveSheet
    5. cntCol = wks.Cells(5, Columns.Count).End(xlToLeft).Column
    6. cntRow = wks.Cells(Rows.Count, 1).End(xlUp).Row
    7. With wks.Range(wks.Cells(6, 2), wks.Cells(cntRow, cntCol))
    8. Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=INDEX(Arbeitszeit!$B$2:$F$26;VERGLEICH(RUNDEN($A6;4);RUNDEN(Arbeitszeit!$A$2:$A$26;4);0);VERGLEICH(B$5;Arbeitszeit!$B$1:$F$1;0))=0"
    9. Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    10. With Selection.FormatConditions(1).Interior
    11. .PatternColorIndex = xlAutomatic
    12. .ThemeColor = xlThemeColorLight1
    13. .TintAndShade = 0.14996795556505
    14. End With
    15. End With
    16. End Sub



    EDIT:
    So das funktioniert eigentlich gut..bis auf das der Befehl erst ausgeführt wird, wenn ich in der bedingten Formatierung die Formel auswähle, bestätige und dann übernehme. Woran könnte das liegen?

    VB.NET-Quellcode

    1. Option Explicit
    2. Dim wks As Worksheet, cntCol As Long, cntRow As Long
    3. Sub Color()
    4. Set wks = ThisWorkbook.ActiveSheet
    5. cntCol = wks.Cells(5, Columns.Count).End(xlToLeft).Column
    6. cntRow = wks.Cells(Rows.Count, 1).End(xlUp).Row
    7. With wks.Range(wks.Cells(6, 2), wks.Cells(cntRow, cntCol)).Select
    8. Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=INDEX(Arbeitszeit!$B$2:$F$26;VERGLEICH(RUNDEN($A6;4);RUNDEN(Arbeitszeit!$A$2:$A$26;4);0);VERGLEICH(B$5;Arbeitszeit!$B$1:$F$1;0))=0"
    9. Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    10. With Selection.FormatConditions(1).Interior
    11. .PatternColorIndex = 1
    12. .ThemeColor = xlThemeColorLight1
    13. .TintAndShade = 0.14996795556505
    14. End With
    15. Selection.FormatConditions(1).StopIfTrue = False
    16. Application.CutCopyMode = False
    17. End With
    18. End Sub

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Sam85“ ()

    1. Wenn Du mit "=INDEX(Arbeitszeit!$B$2:$F$26;VERGLEICH(RUNDEN($A6;4);RUNDEN(Arbeitszeit!$A$2:$A$26;4);0);VERGLEICH(B$5;Arbeitszeit!$B$1:$F$1;0))=0" bei VERGLEICH(RUNDEN($A6;4)...) und VERGLEICH(B$5;...) natürlich immer schön auf A6 bzw. B5 verweist, kann natürlich nix draus werden.
    2. Das hat das Grundsatzproblem jedoch nicht vollständig lösen können. Erst als ich in die Arbeitszeittabelle (testweise in Spalte J, daher auch gleich in der Formel der Verweis auf Spalte J; ggf. passend abändern) die Arbeitszeiten in Sekunden umgewandelt hatte und in die Vergleichsformel ebenfalls Sekunden einbaute, lief es rund. Dabei sind die Werte in der Tabelle »Arbeitszeit« in Spalte J = Werte aus Spalte A x 86400, also steht in z.B. J2 drin: "=A2*86400"
    Die neue Sub lautet somit (eben mit relativem Zellbezug):

    Visual Basic-Quellcode

    1. Dim x As Integer, y As Integer
    2. For y = 6 To 30 'ACHTUNG: hier sind testweise Absolutangaben eingebaut; da gehört Dein cntRow hin
    3. For x = 2 To 10 'ACHTUNG: hier sind testweise Absolutangaben eingebaut; da gehört Dein cntCol hin
    4. ActiveSheet.Cells(y, x).Select
    5. Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=INDEX(Arbeitszeit!$B$2:$F$26;VERGLEICH(A" & y & "*86400;Arbeitszeit!$J$2:$J$26;0);VERGLEICH(" & Chr(Asc("A") + x - 1) & "$5;Arbeitszeit!$B$1:$F$1;0))=0"
    6. Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    7. With Selection.FormatConditions(1).Interior
    8. .PatternColorIndex = xlAutomatic
    9. .Color = 255
    10. .TintAndShade = 0
    11. End With
    12. Next
    13. Next
    14. Selection.FormatConditions(1).StopIfTrue = False


    Chr(Asc("A") + x - 1) ist die Umwandlung von x = 2 in "B", x = 3 in "C", ...
    Ggf. noch die Farben anpassen, da ich erstmal Rot eingebaut habe.

    Vielleicht geht's noch eleganter, aber mir ging es erstmal um die Logikfehler an sich.
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    @VaporiZed
    bei mir hat die Formel eigentlich gut funktioniert, bis auf das ich erst die Formel auswählen und lediglich bestätigen musste, damit sie aktiv wurde (siehe Bild). Die bedingte Formatierung wurde dann mit jeden betreten neu auf das Arbeitsblatt geladen (auch auf den korrekten Bereich), dafür habe ich dann noch eine Delete Funktion eingebaut. Ich weiß nur nicht, warum ich die bedingte Formatierung erst bestätigen muss? ?( Was hat denn bei dir nicht funktioniert bzw.?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Sub Color()
    2. Set wks = ThisWorkbook.ActiveSheet
    3. cntCol = wks.Cells(5, Columns.Count).End(xlToLeft).Column
    4. cntRow = wks.Cells(Rows.Count, 1).End(xlUp).Row
    5. With wks.Range(wks.Cells(6, 2), wks.Cells(cntRow, cntCol))
    6. .FormatConditions.Delete
    7. .FormatConditions.Add Type:=xlExpression, Formula1:="=INDEX(Arbeitszeit!$B$2:$F$26;VERGLEICH(RUNDEN($A6;4);RUNDEN(Arbeitszeit!$A$2:$A$26;4);0);VERGLEICH(B$5;Arbeitszeit!$B$1:$F$1;0))=0"
    8. .FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    9. With .FormatConditions(1).Interior
    10. .PatternColorIndex = 1
    11. .ThemeColor = xlThemeColorLight1
    12. .TintAndShade = 0.14996795556505
    13. End With
    14. .FormatConditions(1).StopIfTrue = False
    15. End With
    16. End Sub



    Bei deiner Option bekomme ich (insofern ich sie richtig zusammengestellt habe :)) eine Fehlermeldung bei Selection.FormatConditions.Add "Laufzeitfehler 5, Ungültiger Prozeduraufruf oder ungültiges Argument."

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Explicit
    2. Dim wks As Worksheet, cntCol As Long, cntRow As Long
    3. Dim x As Integer, y As Integer
    4. Sub Color()
    5. Set wks = ThisWorkbook.ActiveSheet
    6. cntCol = wks.Cells(5, Columns.Count).End(xlToLeft).Column
    7. cntRow = wks.Cells(Rows.Count, 1).End(xlUp).Row
    8. For y = 6 To cntRow 'ACHTUNG: hier sind testweise Absolutangaben eingebaut; da gehört Dein cntRow hin
    9. For x = 2 To cntCol 'ACHTUNG: hier sind testweise Absolutangaben eingebaut; da gehört Dein cntCol hin
    10. wks.Cells(y, x).Select
    11. Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=INDEX(Arbeitszeit!$B$2:$F$26;VERGLEICH(A" & y & "*86400;Arbeitszeit!$J$2:$J$26;0);VERGLEICH(" & Chr(Asc("A") + x - 1) & "$5;Arbeitszeit!$B$1:$F$1;0))=0"
    12. Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    13. With Selection.FormatConditions(1).Interior
    14. .PatternColorIndex = xlAutomatic
    15. .Color = 255
    16. .TintAndShade = 0
    17. End With
    18. Next
    19. Next
    20. Selection.FormatConditions(1).StopIfTrue = False
    21. End Sub


    Bilder
    • Bild.PNG

      11,66 kB, 614×300, 12 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Sam85“ ()

    Ja gut ehh ... Ich habe nicht damit gerechnet, dass Du in einen derart großen Bereich reingehst. Nach Spalte Z kommt AA. Aber nicht in der ASCII-Tabelle. Daher kommt der Fehler auch erst, während die Funktion schon einige Zeit gelaufen ist. Daher mit erweitertem Umfang:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Dim wks As Worksheet, cntCol As Long, cntRow As Long
    3. Dim x As Integer, y As Integer, Spaltenname As String
    4. Sub Color()
    5. Set wks = ThisWorkbook.ActiveSheet
    6. cntCol = wks.Cells(5, Columns.Count).End(xlToLeft).Column
    7. cntRow = wks.Cells(Rows.Count, 1).End(xlUp).Row
    8. For y = 6 To cntRow 'ACHTUNG: hier sind testweise Absolutangaben eingebaut; da gehört Dein cntRow hin
    9. For x = 2 To cntCol 'ACHTUNG: hier sind testweise Absolutangaben eingebaut; da gehört Dein cntCol hin
    10. wks.Cells(y, x).Select
    11. Spaltenname = HoleSpaltenname(x)
    12. Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=INDEX(Arbeitszeit!$B$2:$F$26;VERGLEICH(A" & y & "*86400;Arbeitszeit!$J$2:$J$26;0);VERGLEICH(" & Spaltenname & "$5;Arbeitszeit!$B$1:$F$1;0))=0"
    13. Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    14. With Selection.FormatConditions(1).Interior
    15. .PatternColorIndex = xlAutomatic
    16. .Color = 255
    17. .TintAndShade = 0
    18. End With
    19. Next
    20. Next
    21. Selection.FormatConditions(1).StopIfTrue = False
    22. End Sub
    23. Function HoleSpaltenname(Index As Integer) As String
    24. Dim dividend As Integer, modulo As Integer, Name As String
    25. dividend = Index
    26. Do While (dividend > 0)
    27. modulo = (dividend - 1) Mod 26
    28. Name = Chr(65 + modulo) & Name
    29. dividend = (dividend - modulo) / 26
    30. Loop
    31. HoleSpaltenname = Name
    32. End Function


    Deine Formel führt bei mir zu gar nichts. D.h. sie kann die Zeitwerte in Stunden in der Vergleichstabelle nicht finden. Selbst wenn ich die Bedingte-Formatierungs-Formel, auf [Formel bearbeiten] klicke und sie bestätige, kommt nix.
    Ich habe Excrel 2010. Was ist mit Dir?
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Ich hab die 2016 Home & Student Edition...oha jetzt sieht das Ganze schon recht komplex aus.
    Es läuft zwar komplett durch aber eine Farbe wird dabei nicht eingetragen... ?(
    Nur nochmal zur Sicherheit: anbei Screenshot und die Datei. Wähle das Blatt »Januar - 2017« aus und lass über die Entwicklertools das Makro »SetBGColors« laufen. Es dauert natürlich ne ganze Weile, erzeugt am Ende aber das Screenshotaussehen. Wenn das bei Dir nicht so ist, dann kann ich Dir nicht weiterhelfen, da es dann wohl für diesen Fall relevante Unterschiede zwischen den Excelversionen gibt und bei mir die neue Excel-Version nicht zur Verfügung steht.
    Bilder
    • Nach Makroausführung.png

      111,9 kB, 1.440×900, 14 mal angesehen
    Dateien
    • 2017 - reload.zip

      (179,2 kB, 11 mal heruntergeladen, zuletzt: )
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    @VaporiZed
    diesmal klappt es :)...natürlich dauert es eine ganze Weile...mich wundert nur, dass die Methode von mir nicht bei dir funktioniert. Da dauert es nämlich gar nicht, dafür klappt es aber auch nicht automatisch.
    Macht es Sinn deine Prozedur direkt beim erstellen des Kalenderblattes mit unterzubringen oder überlädt Excel sonst?

    Und diese Zusatzspalte bei den Arbeitszeiten muss vermutlich auch bestehen bleiben.
    In einem komplett ausgewählten Bereich (25 Zeilen x ca. 130 Spalten = 3250 Zellen) nur eine Formel zu setzen, die immer anders ist (da die Zeiten und die Therapeuten sich ja jedes Mal ändern), ohne jede Zelle einzeln anzusprechen und dort die Formel entsprechend abzuändern, bekommt mein Excel einfach nicht hin. Wenn Du Dein Makro durchlaufen lässt, steht dann im ersten VERGLEICH immer eine andere Zelladresse drin oder immer A6?
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    @VaporiZed Im Grunde lasse ich mein Makro gar nicht "durchlaufen", es erzeugt einfach die bedingte Formatierung und gibt einen Zellbereich an, ohne jede einzelne Zelle anzusprechen (siehe Bild). Die Formel bleibt dabei immer die Gleiche. Und jedes mal wenn ich auf das Blatt gehe, wird die Formel neu angelegt (daher das Delete) aber das muss ich mir anders überlegen weil es nicht aktiv wird ohne manuellen Anstoß und das Delete alles wieder entfernt (oder ich wähle halt eine andere Aktivierungsform).

    Bei dir habe ich jetzt das Problem :), dass für jedes Feld ein Eintrag bei den bedingten Formatierungen vorhanden ist. Kann man irgendwie alle aufeinmal löschen? EDIT: Das Delete löscht alle :), hat sich also erledigt.

    Alternativ habe ich überlegt, einfach auf die bedingte Formatierung zu verzichten beim Einfärben und einfach so die jeweiligen Felder zu färben (mit Button oder direkt in der Schleife wo das Arbeitsblatt erzeugt wird). Was denkst du, macht das mehr Sinn? (Spart zumindest Kapazitäten :)).
    Bilder
    • Bild 1.PNG

      40,49 kB, 1.548×562, 9 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Sam85“ ()

    Sam85 schrieb:

    Im Grunde lasse ich mein Makro gar nicht "durchlaufen"
    Irgendwann muss es ja mal aktiviert werden. Dass Du das nicht per Hand machst, sondern bei der Blatterstellung ggf. einmal aktiviert wird, davon gehe ich aus.

    Sam85 schrieb:

    Bei dir habe ich jetzt das Problem :), dass für jedes Feld ein Eintrag bei den bedingten Formatierungen vorhanden ist.
    Ich glaub wir reden seit ner ganzen Weile aneinander vorbei. Wenn nicht jede Zelle eine eigene Formel für die bedingte Formatierung hat, wie soll es denn dann gehen? Ist denn die Formel in B6 bei Dir absolut identisch zur Formel in C7?

    Sam85 schrieb:

    Die Formel bleibt dabei immer die Gleiche.
    Das kann ich eben nicht nachvollziehen. Schick mal bitte die Datei hoch, nachdem im Juni alle Zellen ihre bedingte Formatierung erhielten. Egal, ob man nun die Farben sieht oder nicht.

    Sam85 schrieb:

    Was denkst du, macht das mehr Sinn?
    Wenn's dazu passt. Klingt zumindest plausibel.
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    @VaporiZed

    Also wie gesagt die Formel wird mir ja nur einmal angezeigt in der bedingten Formatierung und somit auch nur einmal eingetragen, wirkt sich aber auf alle Felder aus (siehe Bild im vorherigen Eintrag, da ist alles eingefärbt was eingefärbt werden soll). Warum das so funktioniert weiß ich auch nicht, denn ich verstehe deine Aussage, welche logisch für mich auch nur Sinn macht. :) Aktiviert wird sie komischerweise erst, wenn ich sie im Menü für die bedingten Formatierung einfach nur bestätige und übernehme.

    Datei anbei. Im Modul mdlColorTime, Sub ColorTime. Anwendung erfolgt über Doppelklick in den Kalenderblättern Arbeitsblatt einfärben.
    Dateien
    • 2017 - upload.zip

      (182,79 kB, 10 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sam85“ ()

    Hab jetzt mal hier nen Screenshot: Habe nur irgendeine Zelle angewählt und lasse mir die Formatierungsformel anzeigen. Da steht VERGLEICH(RUNDEN($A6;4 drin. Dürfte es aber nicht, damit es richtig funktioniert, sondern es müsste VERGLEICH(RUNDEN($A25;4 drinstehen. Ich will ja in Zeile 25 nicht die Zeit von Zeile 6 suchen lassen. Das ist mein Problem, welches ich nicht lösen kann. Daher kann ich wohl leider nur sagen: Ich habe fertig.
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«