Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1864to1868
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Exit aus Fallprüfung

Exit aus Fallprüfung
18.01.2022 10:41:34
LUHU
Liebe Community,
ich habe einen Select Case Fall und folgenden Code.
Die Frage lautet: Wie schaffe ich in dem Case 2 Is > val_max 'grösser Toleranz jedes mal die Prüfung einzubauen ob AB7 nun im Toleranzbereich ist (also Case 1) ist bzw. die Zelle in AB7 grün ist und dann automatisch die nächste Zeile kontrolliert wird.
Mir fehlt wie gesagt, die Möglichkeit des vorzeitigen Exits von Case 2 Is > val_max 'grösser Toleranz
Um jede Hilfe bin ich dankbar!

Sub Datenprüfung()
Dim rng As Range
Dim val As Range
Dim val_min As Long, val_max As Long
'   Spalte 28 entspricht Zelle AB
Dim z As Long
z = Cells(Rows.Count, 28).End(xlUp).Row
For z = 7 To z
Cells(z, 28).FormulaR1C1 = "=Sum(RC20, RC34, RC36, RC38, RC40, RC42, RC44, RC46, RC48, RC50, RC52, RC54, RC56, RC58)"
Next
z = Cells(Rows.Count, 27).End(xlUp).Row
Set rng = Columns("AB").SpecialCells(xlCellTypeFormulas)
rng.Interior.ColorIndex = xlNone
For Each val In rng
val_min = Cells(val.Row, "Y") - Cells(val.Row, "V")
val_max = Cells(val.Row, "Y") + Cells(val.Row, "V")
Select Case val
Case val_min To val_max 'in Toleranz
val.Interior.Color = vbGreen
Case Is > val_max 'grösser Toleranz
BF_alt = Cells(val.Row, "BF")
 'in Zelle BF7 springen und dort so lange den Wert in Zelle BF7 mit V7 subtrahieren, bis der Wert in BF7 entweder 0 oder der Wert in Zelle AB7 in der Range von Y7 +- V7 ist.
Do
Cells(val.Row, "BF") = Cells(val.Row, "BF") - Cells(val.Row, "V")
Loop Until Cells(val.Row, "BF") = val_min And val 'Wert wiederherstellen
 wenn Zelle BF7 null ist
' in Zelle BD7 springen und dort das gleiche machen wie in Zelle BF7.
'Wert in Zelle BD7 mit V7 subtrahieren, bis der Wert in BD7 entweder 0 oder der Wert in Zelle AB7 in der Range von Y7 +- V7 ist
'GIBT ES HIER DIE MÖGLICHKEIT EINES EXITS DES CASES: Falls nach der Subtration BF7 - V7 dann AB7 in Toleranzbereich, dann prüfe nächsten Case,
ansonsten gehe zu BD7 und mache das gleiche .
Folgender Code funktioniert dabei nicht!
If Cells(val.Row, "AB") = vbGreen Then
Next val
End If
End If
BD_alt = Cells(val.Row, "BD")
Do
Cells(val.Row, "BD") = Cells(val.Row, "BD") - Cells(val.Row, "V")
Loop Until Cells(val.Row, "BD")  val_min And val  'wenn Zelle BF7 null ist
'dann in Zelle BD7 springen und dort das gleiche machen wie in Zelle BF7.
'Wert in Zelle BD7 mit V7 subtrahieren, bis der Wert in BD7 entweder 0 oder der Wert in Zelle AB7 in der Range von X7 +- U7 ist.
'Falls nach der Subtraktion BF7 - V7 dann AB7 in Toleranzbereich, dann prüfe nächsten Case, ansonsten gehe zu BD7 und mache das gleiche .
End If
Case Is = val_min And val 

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Exit aus Fallprüfung
18.01.2022 11:27:47
Yal
Hallo Luhu,
lasst den Makrorekorder laufen und färbe eine Zelle in gruen. Dann schaue die der Code an. Es müsste etwas wie .Interior.Color oder .Interior.ColorIndex geben.
Dann machst Du mit diesem Coding einen Test, der die Farbgebung eine gruene Zelle list, um sicherzustellen, dass der Farbe den "vbGreen" entspricht (unwahrscheinlich, da vbGreen etwa "ältere Version").
Dann kannst Du die verschiedene Teilen zusammenfügen.
VG
Yal
AW: Exit aus Fallprüfung
18.01.2022 15:19:54
LUHU
Danke @Yal & Zwenn
AW: Exit aus Fallprüfung
18.01.2022 18:02:58
Yal
Hallo Luhu,
es ist ja lustig, dass Du dich bedankst, weil weder Zwenn noch ich Dir eine richitige Lösung geliefert haben.
Deine Frage ist eine Wiederholung von
https://www.herber.de/forum/archiv/1860to1864/1862645_Loop_durch_Zeilen_bei_erfuellten_Bed.html
damals hatte MCO und ich eine Lösung vorgeschlagen. Du hast MCOs Code übernommen und anscheinend daran weiter gebastelt... Nicht schlimm. Es gehört so.
Nur dass den Code nicht richtig sein kann, weil 2 For-Schleife notwendig sind (Sorry MCO :-)
Ist die Datei immer noch gültig? https://www.herber.de/bbs/user/149967.xlsm
Es ist wohl eine Spalte dazugekommen, den die Summe nicht mehr in AA sondern in AB liegt.
Die Frage ist: warum willst Du prüfen, ob den Zellenhintergrund grün ist? Weil die Bedingung "Im Toleranz" getroffen wäre? aber warum dann innerhalb von einem anderen Fall (grösser oder kleiner als Toleranz)? es gibt einen Regel, warum diese Zelle grün geworden ist. Prüft lieber, ob die Regel eingehalten ist, anstatt auf das Ergebnis einer vorigen Prüfung.
Der logische Vorgehensweise:

Für jede Zeile von 8 bis letzte
Für jede zweite Spalte von BE bis AAI rückwärts
Wenn Summe nicht im Toleranz
'nur ein von beide nächsten kann zutreffen
Solang Summe grösser als Toleranz und grösser als Grenzwert, Werte in Zeile|Spalte um Schrittmacher reduzieren
Solang Summe kleiner als Toleranz und kleiner als Grenzwert, Werte in Zeile|Spalte um Schrittmacher erhöhen
Ende Wenn
Wenn Summe im Toleranz
Dann Hintergrund in grün
Ende Wenn
nächste Spalte
nächste Zeile
Also: die Prüfung, ob im Toleranz, findet danach statt und nicht als "Else" sondern als eigenstandige "If".
Ein "Next" innerhalb einer For-Schleife wird erreicht, in dem innerhalb der For eine If-Block stattfindet, der direkt vor dem "Next" endet.
Auf einer Rückmeldung freut man sich immer.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige