Hallöchen,
nur mal ein Hinweis am Rande. Du hast schon With in Deinem Code, verwendest es abe rnicht konsequent.Hier mal ein Beispiel.
Code:
With wb2.Worksheets(i)
Worksheets(i).Select
lastrow2 = Cells(Cells.Rows.Count, "F").End(xlUp).Row
Set rng = Worksheets(i).Range("D40:F" & lastrow2 + lastrow2)
Set rng2 = Worksheets(i).Range("N40:AY" & lastrow2 + lastrow2)
konsequent wäre
Code:
With wb2.Worksheets(i)
lastrow2 = .Cells(Cells.Rows.Count, "F").End(xlUp).Row
Set rng = .Range("D40:F" & lastrow2 + lastrow2)
Set rng2 = .Range("N40:AY" & lastrow2 + lastrow2)
'usw.
Das Select kann hier weg und beachte in den folgenden 3 Zeilen den Punkt vor der Bereichsangabe.
Bei mir kommt übrigens ein Fehler bei
For j = 1 To UBound(sn)
weil sn leer ist. Da war ich eventuell beim Start des Makros auf einem falschen Blatt oder auch nicht, siehe Thema inkonsequente Nutzung von With und ebenso die Nutzung der Blattnamen oder der Indexnummer der Blätter.
Sheets(1)....
Worksheets(i)...
Worksheets("OVL")...
ActiveSheet...
Da muss man schon etwas suchen, um zu sehen, wo man ist
Für die meisten Actionen kann man, wie gesagt, With verwenden und braucht ein Blatt nicht zu aktivieren.