So, nochmal sauber...
20.07.2016 12:45:51
Michael
Hallo Dauth!
Hab's nochmal "von Null" geschrieben, kann sein, dass ich in der Eile beim vorigen Code irgendwo schlampig war.
Bitte teste folgenden Code (wieder auf Basis Deiner Bsp-Mappe erstellt). Diesmal sollte alles wie gewünscht klappen:
Sub ListenAbgleichen()
'Wenn Teilenummer aus Neue_Daten nicht in Alte_Daten, dann diesen Datensatz
'in Neue_Teile kopieren
'Neue_Teile soll vor dem Vorgang geleert werden
'Wenn Teilenummer aus Alte_Daten nicht in Neue_Daten, dann diesen Datensatz
'in Alte_Teile kopieren (wird zuvor NICHT geleert)
Dim Wb As Workbook
Dim DatenNeu As Worksheet
Dim DatenAlt As Worksheet
Dim TeileNeu As Worksheet
Dim TeileAlt As Worksheet
Dim arrNeu, arrAlt
Dim i As Long, j As Long, s, z As Long
Dim clc
With Application
clc = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
Set Wb = ThisWorkbook
With Wb
Set DatenNeu = .Worksheets("Neue_Daten")
Set DatenAlt = .Worksheets("Alte_Daten")
Set TeileNeu = .Worksheets("Neue_Teile")
Set TeileAlt = .Worksheets("Alte_Teile")
End With
With TeileNeu
.Cells(2, 1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, 11).Clear
End With
With DatenNeu
arrNeu = Application.Transpose(.Range("K2:K" & .Cells(.Rows.Count, 11).End(xlUp).Row))
End With
With DatenAlt
arrAlt = Application.Transpose(.Range("K2:K" & .Cells(.Rows.Count, 11).End(xlUp).Row))
End With
For i = LBound(arrNeu) To UBound(arrNeu)
s = Application.Match(arrNeu(i), arrAlt, 0)
If IsError(s) Then
j = i + 1
With DatenNeu
.Range(.Cells(j, 1), .Cells(j, 11)).Copy
With TeileNeu
z = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(z, 1).PasteSpecial xlPasteValues
.Cells(z, 1).PasteSpecial xlPasteFormats
End With
End With
End If
Next i
For i = LBound(arrAlt) To UBound(arrAlt)
s = Application.Match(arrAlt(i), arrNeu, 0)
If IsError(s) Then
j = i + 1
With DatenAlt
.Range(.Cells(j, 1), .Cells(j, 11)).Copy
With TeileAlt
z = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(z, 1).PasteSpecial xlPasteValues
.Cells(z, 1).PasteSpecial xlPasteFormats
End With
End With
End If
Next i
MsgBox "Listen wurden abgeglichen!", vbInformation, "Fertig!"
With Application
.Calculation = clc
.ScreenUpdating = True
.CutCopyMode = False
End With
Set Wb = Nothing
Set DatenNeu = Nothing
Set DatenAlt = Nothing
Set TeileNeu = Nothing
Set TeileAlt = Nothing
Erase arrNeu
Erase arrAlt
End Sub
LG
Michael