VBA Code sehr langsam - Optimierung möglich?
17.08.2015 16:47:49
Martin
ich bin neu hier, hab aber schon öfters hilfreiche Infos und Lösungen für meine Probleme bekommen.
Jetzt hab ich aber ein Problem, was ich alleine nicht lösen kann.
Ich habe eine Materialliste mit Materialien und jeweils einer Materialnummer.
Bestimmte Materialien dieser Liste kommen in einer anderen Gesamtliste mit mehr als 30.000 Einträgen vor. Die Materialien, die hier vorkommen sind in meiner Materialliste mit einem "X" in einer Spalte gekennzeichnet.
Jedes Material kommt in der Gesamtliste mehrfach vor (ca. 30 mal), weil es unterschiedliche Lagerorte besitzt. Gleiche Materialien stehen dabei glücklicherweise untereinander.
Nun soll das Material mit dem "X" aus der Gesamtliste herausgesucht werden und alle Treffer in der Gesamtliste nach einem speziellen Lagerort überprüft werden.
Dieser Lagerort soll anschließend zurückgegeben werden.
Weil dies nur ein Teil meines Codes ist, habe ich für die Suche in der Liste eine eigene Funktion erstellt, um es übersichtlicher zu machen.
Der sieht ungefähr so aus (etwas gekürzt):
Public Function Suche(Matnr As Long)
On Error Resume Next
Dim start As Long
Dim ende As Long
Dim antwortzeile As Long
Dim Lagerort As String
Lagerort = "Fach123"
' S U C H E
start = Sheets("Gesamtliste").Range("F1:F40000").find(Matnr).Row
ende = Sheets("Gesamtliste").Range("F1:F40000").find(Matnr, SearchDirection:=xlPrevious).Row
antwortzeile = Sheets("Gesamtliste").Range("C" & start & ":C" & ende).find(Lagerort).Row
Suche = antwortzeile
End Function
Aufgerufen wird die Funktion dann ungefähr so:Sub test()
On Error Resume Next
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Dim nummer As Long
Dim y As Integer
y = 1
For i = 10 To 100
If Sheets("Extract").Cells(i, 5).Value "" Then
If Sheets("Materialliste").Cells(i, 11).Value = "X" Then
nummer = Suche(Sheets("Materialliste").Cells(i, 5).Value)
Sheets("Materialliste").Cells(y, 12).Value = nummer
y = y + 1
End If
End If
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Diese ganze Prozedur dauert endlos lange.Könnt ihr mir da helfen? Kann ich da irgendwas verbessern?
Viele Grüße
Maddin