2017-08-04 5 views
0

Ich habe eine Arbeitsmappe mit 1 Arbeitsblatt, das 14k Zeilen und 36 Spalten enthält. Spalten 24 bis 36 enthalten Formeln (ao Formeln find und vlookup).Excel VBA reduzieren Verarbeitungszeit von Autofilter Makro

Die Berechnung ist auf manuell eingestellt.

Ich habe ein Testmakro erstellt, das einen Autofilter auf dem Dataset einrichtet und 4 Filterkriterien enthält (siehe Code unten). Das komische Ding ist, dass, wenn ich dieses Makro zum ersten Mal ausführe, es 109 Sekunden braucht, um zu laufen, das zweite Mal dauert es 17 Sekunden, und das dritte und aufeinander folgende Male ist es ungefähr 0,3 Sekunden. Ich finde das wirklich komisch. Wie kann das passieren und was kann ich tun, um die 0,3 Sekunden beim ersten Mal zu bekommen?

Danke.

Sub test() 
Dim ws As Worksheet 
Dim ws As Worksheet  
Dim rng As Range  
Dim PG() 

PG = Array(“441”, “445”, “446”, “447”) 
Set ws = Worksheets(“Notificaties”) 
ws.AutoFilterMode = False 
Set rng = ws.Range(“A1”) 
Set rng = ws.Range(rng, rng.End(xlToRight)) 

With rng  
.AutoFilter  
.AutoFilter Field:=4, Criteria1:=”TWAP*”  
.AutoFilter Field:=29, Criteria1:=”<>*II*”  
.AutoFilter Field:=30, Criteria1:=”TRUE”  
.AutoFilter Field:=22, Criteria1:=PG, Operator:=xlFilterValues 
End With 

End Sub 
+0

Versuchen Sie ersetzen 'Criteria1: = PG' mit' Criteria1: = (PG) '. Etwas besser ? –

+0

@ Johan; Sie können versuchen, https://codereview.stackexchange.com/ für diese Art von Frage zu testen. Wenn der Code funktioniert und optimiert werden muss, wäre das die ideale Seite. – Cyril

Antwort

0

Werden die Formeln nicht aktualisiert worden ist, wird sie durch den ersten Befehl Autofilter aktualisiert werden, auch mit Application.Calculation = xlCalculationManual. Also vor dem Autofilter verwenden, können Sie die Formeln mit einem Befehl wie folgt aktualisiert werden soll:

Application.Calculation = xlCalculationAutomatic