Loop / Schleife um Zellen zu färben

Bild

Betrifft: Loop / Schleife um Zellen zu färben
von: udo
Geschrieben am: 14.10.2015 16:56:58

Hallo Forum, sollte bitte nochmal eure Unterstützung haben.
Würde gerne in Selection.Change Ereignis eine Prozedur laufen lassen,
die mir in der aktiven Zeile dann mitläuft, sobald ich in dieser Zeile in den Spalten hin oder her springe ( per Pfeile der Tastatur ).
ich fülle die Zellen jew. mit Namenskürzeln FT, HK , DS oder so
Verweisbereich:
In einem Zellbereich ( E200:H400 ) stehen in der ersten Spalte die Kürzel, und in den rechten 3 Spalten die jew. RGB ( Farbwerte ) F200 = R Wert, G200 G und H200 = B Wert. das ganze abwärts bis Zeile 400.
In diesem Zellbereich hat demnach jedes Kürzel andere Farb-Zahlenwerte.
Arbeitsbereich:
Der Bereich in dem ich nun die Prozedur laufen lassen will wäre von Spalte S(=Spalte19):PB(=Spalte418)
eben in der jeweiligen Zeile 22:200
Verhalten der Prozedur:
sobald sich in der aktiven Zeile ein Wert hinzufügt, oder abändert, oder dezimiert, soll die Prozedur von Spalte S : PB durchlaufen und anhand des entdeckten Kürzel dann aus der Verweisbereich durch die angelegten Zahlenwerte in den drei RGB Spalten dann die Zelle mit dem entspr, Kürzel dann entsprechend färben ...
Dim r As Long, c As Long
r = ActiveCell.Row
c = ActiveCell.Column

With Cells( r, c )
.Interior.Color = RGB( Verweis, Verweis, Verweis )
end with
Ich habe es bislang ohne Schleife gelöst, etwas aufwändig und daher auch sehr träge beim Verwenden ( siehe Beispiel https://www.herber.de/bbs/user/100794.xlsm )
Im Beispiel läuft es sauber, jedoch in der Vollwertigen Datei hakelts schon etwas
da da mehrere Sachen greifen.
Kann es sein das dies über eine Schleife in der jew. Zeile dann schneller läuft ?
Ich komm damit nicht weiter, sollte bitte eure Hilfe beanspruchen
Bin für jede Hilfe dankbar
lG udo

Bild

Betrifft: AW: Loop / Schleife um Zellen zu färben
von: Daniel
Geschrieben am: 14.10.2015 21:37:34
Hi
ich wüsste jetzt nicht, wo man da mit einer Schleife was ändern könnte.
du könntest ein paar Dinge im Code vereinfachen.
ob die das ganze aber wirklich schneller machen, weiss ich nicht.
- Statt Cells(r, c) bzw Cells(r,c + 1) könntest du TARGET(1) bzw TARGET(1).OFFSET(0, 1) verwenden (für die anderen Versatzrichtungen natürlich auch)
- dein IF-THEN-Konstrukt ist etwas altmodisch
du kannst die Sprungmarke und das GOTO weglassen, wenn du stattdessen mit IF-THEN-ELSEIF-ELSEIF-ELSE-END IF arbeitest
sieht in etwa so aus:
dein Spaghetti-Code:

...
IF Bedinung1 Then
   ...
   Goto SprungMarke
End If
If Bedingung2 Then
   ...
   Goto SprungMarke
End If
If Bedingung3 Then
   ...
   Goto SprungMakre
End If
SprungMarke
...
etwas moderner:
...
IF Bedingung1 Then
   ...
ElseIF Bedingung2 Then
   ...
ElseIf Bedingung3 Then
   ...
End If
...

- verwende in der Bedingungsprüfung statt langer AND - Verknüpfungen geschachtelte IF-THENs mit nur einer Bedingung:
If a AND b AND c Then
    ...
End IF

ist langsamer als
IF a Then
    if b Then
        if c Then
            ...
        end if
    end if
end if

weil im ersten Fall immer alle drei bedingungen geprüft werden.
in der zweiten Version werden b und c nur dann geprüft wenn auch a erfüllt ist, dh wahrscheinlich deutlich weniger oft.
die Reihenfolge der Prüfungen kann hier einen Einfluss haben, dh die Bedingung, welche am wenigsten wahrscheinlich erfüllt wird, sollte als erste geprüft werden.
Allerdings müsstest du hierbei dann doch auf Goto-Sprung zurückgreifen, um den Lauf abzubrechen, wenn ein Fall zutraf.
Kleiner Tip noch am Rande, das ganze wird übersichlicher, wenn man END-Zeilen von IF und WITH auf die gleiche Spalte setzt wie das dazugehörige IF und WITH und nicht weiter einrückt, dann sieht man besser wo der Block endet.
Gruss Daniel

Bild

Betrifft: lieben Dank für deine Hilfe Daniel...
von: udo
Geschrieben am: 15.10.2015 09:05:06
... das mit der Reihenfolge in der Abfrage hab ich nun verstanden, werde deine Ansätze gerne umsetzen, Danke dir wiedermal sehr für deine Mühen.
Grüße aus Stuttgart
udo

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Loop / Schleife um Zellen zu färben"