2016-05-03 21 views
2

Ich möchte ein Makro machen, das überprüft, ob das Datum in Spalte A weniger als heute ist. Wenn dies der Fall sollte die Makro einfügen „done“ in Spalte G.Excel Makro - sehr langsam

Sub DoneCheck() 

Dim rngZelle As Range, strText As String 
With ActiveSheet 

For Each c In Sheets("3. Umlagerungen").Range("A:A") 
If c.Value < Int(Now) And Not (IsEmpty(c.Value)) Then c.Offset(0, 6).Value = "done" 

Next c 
End Sub 

Ich weiß, dass es sehr schlecht codiert, aber es funktioniert ... Der Grund, warum ich nach Hilfe bin auf der Suche, weil es wirklich läuft langsam ...

Ich habe es mit Application.ScreenUpdating versucht, aber es ändert nichts.

Danke im Voraus & Grüße

+0

Check [dieses Thema für einige Optimierungstipps] (http://stackoverflow.com/questions/20738373/cani-i-make-this-macro-more-efficient-or-faster/20754562#20754562), könnte es mehr solche Threads geben. Hast du sie überprüft und implementiert? – Spidey

Antwort

3

Sie sollten nur die verwendeten Zellen in Spalte A überprüfen, und das Hinzufügen von Application.ScreenUpdating = False hilft immer Dinge zu beschleunigen:

Sub DoneCheck() 
Dim eRow as long 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

eRow = Thisworkbook.Sheets("3. Umlagerungen").Cells(Rows.Count,1).End(xlUp).Row 

For Each c In Thisworkbook.Sheets("3. Umlagerungen").Range("A2:A" & eRow) 
    If c.Value < Int(Now) And Not (IsEmpty(c.Value)) Then c.Offset(0, 6).Value = "done" 
Next c 

Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 

End Sub 
+0

Es scheint, als ob es ein wenig schneller geworden ist, aber es ist immer noch sehr langsam. Die Menge der Daten dahinter ist nicht besonders groß. – Bluesector

+0

Gibt es Berechnungen im Blatt? Es kann helfen, diese auch auszuschalten, während das Makro läuft, und sie dann wieder auf automatisch zurückzusetzen, wenn die Schleife z. 'Application.Calculation = xlCalculationManual' am Anfang und' Application.Calculation = xlCalculationAutomatic' am Ende – Jordan

+0

** Das ist es **, danke! – Bluesector