1.8k Aufrufe
Gefragt in Tabellenkalkulation von deathfun Mitglied (177 Punkte)
Hallo,

In einer langen Liste an Daten in Spalte A wird per Script ein vergleich durchgeführt.

Ist der Vergleich Positiv wird die Zeile gefärbt und angesprungen. Für letztes verwende ich ActiveWindow.ScrollRow.

In etwa:

For temp2 = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If true Then
Mach was anderes
Else
' MsgBox(temp2)
Mach was anderes
ActiveWindow.ScrollRow = temp2
Cells(temp2, 1).Interior.ColorIndex = 6
Cells(temp2, 1).Value).Interior.ColorIndex = 6
End If
Next


Gestartet wird das Skript aus einer UserForm heraus mit einem Button.

Das Problem ist jedoch: Kommentiere ich die Messagebox oben im Beispiel aus läuft das Skript für ca. 10Sek und spring direkt von der ersten zur letzten Zeile. Kommentiere ich die MsgBox ein springt das Bild, wie gewünscht, zu den gefunden Daten und arbeitet sich nach unten durch.

Wie kann ich das Bild quasi Updaten wenn der Else Zweig ausgeführt wird ohne MsgBox? Durchsucht werden ca 526.000 Zeilen und gefärbt werden müssen vielleicht 5 weshalb das anspringen während des durchlaufen sehr praktisch ist um zu sehen wo der Fund ungefähr ist.

Danke

4 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

die Syntax ist konfus !!!

gruss nighty
0 Punkte
Beantwortet von
Hallo Fabian,

was nighty meint ist, dass du nicht gerade viele Informationen lieferst. Was ist die Bedingung die zu True oder False führt? Was passiert in Mach was anderes. Ist es möglich dass dort ein vorzeitiger Abbruch des Codes stattfindet?

Basierend auf den gegebenen Informationen kann ich dir nur den Befehl DoEvents anbieten. Wenn du den als letztes im Else Teil unterbringst sollte das Bild während der Laufzeit geupdatet werden.

Gruß Mr. K.
0 Punkte
Beantwortet von
Im Übrigen dürfte Cells(temp2, 1).Value).Interior.ColorIndex = 6 zu einem Fehler führen. Was bezweckst du damit?
0 Punkte
Beantwortet von deathfun Mitglied (177 Punkte)
Hallo,

tja eigentlich wollte ich das ganze mit dem weglassen von Variablen Namen übersichtlicher gestallten aber wie gewünscht der komplette Auszug der betreffenden FOR-Anweisung:




For temp2 = 1 To Cells(Rows.Count, SpalteSQ.Value).End(xlUp).Row
If Not objDic.exists(Cells(temp2, SpalteSQ.Value).Value) Then
objDic.Add Cells(temp2, SpalteSQ.Value).Value, Cells(temp2, SpalteSQ.Value)
Else
summe = summe + 1
If CheckBox3.Value = True And temp2 > 11 Then ActiveWindow.ScrollRow = temp2 - 10
If CheckBox4.Value = True Then Cells(temp2, SpalteSQ.Value).Interior.ColorIndex = 6
If CheckBox4.Value = True Then objDic(Cells(temp2, SpalteSQ.Value).Value).Interior.ColorIndex = 6
If CheckBox5.Value = True Then Cells(temp2, Asc(SpalteSQ.Value) - 96 + 1).Value = 1
End If
Next


@ ExcelKing: Versehentlich die Klammer weggenommen.


Inzwischen habe in den IF-Zweig der CheckBox3 ein UserForm.Hide mit untergebracht (nicht im Code oben) was das Problem aushebelt - nicht schön aber geht.

Mit dem DoEents werde ich mich nun etwas beschäftigen, bin mir noch nicht sicher wie genau es arbeitet.

Noch einmal zusammengefasst: In einer UserForm werden ein paar Parameter angegeben und mit einem Button ein Suchlauf gestartet. Aus der Erfahrung heraus sind die Datensätze ca 500k-600k Zeilen groß, es dauert also auch eine Weile, zur Übersicht gibt es die Option die Funde, meist 0-5, während des Suchlaufs anzuspringen.

Wird das Skript als Makro "direkt" ausgeführt, bedeutet ohne UserForm und mit Festen Parametern, arbeitet es wie gewünscht. In der "UserForm" Variante jedoch scheint jedoch den Focus zu behalten und das Blatt im Hintergrund wird nicht mehr Aktualisiert - sprich: Er springt quasi vom Start zum Ende.


Gruß
deathfun
...