VBA code schneller machen
27.08.2020 11:04:23
Jimmy
Erstmal vorab, ich bin absolut neu in Excel VBA. Ich habe einen VBA Code für einen Urlaubsplaner geschrieben. Er vergleicht zunächst von Mappe (Abwesenheit) und der Mappe (Übersicht) die MA's miteinander und falls sie übereinstimmen geht der Loop anschließend über das jeweilige Datum des MA's und markiert die Datumsfelder farblich je nach Art der Abwesenheit.
Das Problem ist, dass dieses Makro sehr langsam ist. Ich vermute stark das es an den For-Each Schleifen liegt. Hat jemand eine Idee wie man den Code schneller machen kann?
Vielen Dank für jegliche Hilfe!
Sub FarblicheMarkierung()
Dim c As Range
Dim e As Range
Dim datum_zeile As Variant
Dim zelle As Integer
Dim bereich1 As Variant
Dim bereich2 As Variant
Dim bereich3 As Variant
Dim bereich4 As Variant
Dim bereich5 As Variant
Dim bereich6 As Variant
Dim bereich7 As Variant
Dim bereich8 As Variant
Dim bereich9 As Variant
Dim zeile_urlaub As Integer
Dim datum_von As Variant
Dim datum_bis As Variant
Dim Art_Abwesenheit As Variant
Dim ButtonAntwort As Long
Dim size1 As Integer
Dim size2 As Integer
bereich1 = "D"
bereich2 = "E"
bereich3 = "G"
bereich4 = "NG"
bereich5 = "F"
bereich6 = "C"
bereich7 = "C4"
bereich8 = "B"
bereich9 = "B4"
size1 = WorksheetFunction.CountA(Worksheets("Abwesenheit").Columns(3)) + 1
size2 = WorksheetFunction.CountA(Worksheets("Übersicht").Columns(2)) + 2
Range("G4:NG264").Cells.Interior.Color = RGB(230, 230, 230)
For Each c In Worksheets("Abwesenheit").Range(bereich7, bereich6 & size1).Cells
For Each e In Worksheets("Übersicht").Range(bereich9, bereich8 & size2).Cells
If c.Text = e.Text Then
zelle = e.Row
zeile_urlaub = c.Row
datum_von = Sheets("Abwesenheit").Range(bereich1 & zeile_urlaub)
datum_bis = Sheets("Abwesenheit").Range(bereich2 & zeile_urlaub)
Art_Abwesenheit = Sheets("Abwesenheit").Range(bereich5 & zeile_urlaub)
For Each datum_zeile In Worksheets("Übersicht").Range(bereich3 & zelle, bereich4 & _
_
_
_
zelle).Cells
If datum_zeile >= datum_von And datum_zeile
Problem:
-> Makro ist sehr langsam