AW: Daten zentral zusammenschreiben
fcs
Hallo Steve,
ich jetzt auch noch herausgefunden, das man bei Listen-Objekten, die Spalten auch über den Spaltentitel ansprechen kann. Deshalb hier das Makro überarbeitet inkl. der zusätzlichen Prüfungen auf "x" in bestimmten Spalten.
Gruß
Franz
Sub Listenabgleich1()
Dim wksVP As Worksheet, oListeVP As ListObject, sProjekt As String
Dim wksVersand As Worksheet, oListeVersand As ListObject
Dim rngVersand As Range
Dim SpalteVers As ListColumns, SpalteVP As ListColumns
Dim datLetzterVersand As Date
Dim ZeileVers As Long, ZeileVP As Long, Zeile As Long
'Objekte und Infos im Blatt Katalogversendung
Set wksVersand = Worksheets("Katalogversendung")
Set oListeVersand = wksVersand.ListObjects(1)
Set SpalteVers = oListeVersand.ListColumns
Set rngVersand = oListeVersand.DataBodyRange
datLetzterVersand = wksVersand.Range("B1").Value
'Letzte Zeile mit Daten im Bereich der Katalogversand-Daten
With rngVersand
ZeileVers = 0
For Zeile = .Rows.Count To 1 Step -1
If Not IsEmpty(.Cells(Zeile, SpalteVers("Projekt").Index)) Then
ZeileVers = Zeile
Exit For
End If
Next
End With
'VP-Blätter abarbeiten
Application.ScreenUpdating = False
For Each wksVP In ActiveWorkbook.Worksheets
'Ersten beiden Zeichen des Blattnamens prüfen
If Left(wksVP.Name, 2) = "VP" Then
'Listen-Objekt setzen
Set oListeVP = wksVP.ListObjects(1)
Set SpalteVP = oListeVP.ListColumns
'Projektname auslesen
sProjekt = wksVP.Range("B1").Text
With oListeVP.DataBodyRange
'Zeilen in Liste abarbeiten
For ZeileVP = 1 To .Rows.Count
'Vergleich Änderungsdatum mit letztem Versanddatum
If datLetzterVersand < .Cells(ZeileVP, SpalteVP("Datum Änderung").Index) Then
'Prüfen, ob X bei "Infomaterial erhalten""
If LCase(.Cells(ZeileVP, SpalteVP("Infomaterial erhalten?").Index)) = "x" Then
'Zeile überspringen
Else
'Prüfen, ob X bei "per Post" oder "e-Mail"
If LCase(.Cells(ZeileVP, SpalteVP("Infomaterial per Post").Index)) = "x" _
Or LCase(.Cells(ZeileVP, SpalteVP("Infomaterial per Mail").Index)) = "x" Then
'Zeilenzähler erhöhen
ZeileVers = ZeileVers + 1
'Prüfen, ob Zähler größer als Datenbereich der Liste/Tabelle im Versandblatt
If ZeileVers > rngVersand.Rows.Count Then
'Liste/Tabelle um eine Zeile vergrößern
oListeVersand.ListRows.Add
Set rngVersand = oListeVersand.DataBodyRange
End If
'Daten übertragen
rngVersand.Cells(ZeileVers, SpalteVers("Projekt").Index) = sProjekt
rngVersand.Cells(ZeileVers, SpalteVers("Firmenname").Index) = _
.Cells(ZeileVP, SpalteVP("Firmenname").Index)
rngVersand.Cells(ZeileVers, SpalteVers("ASP-Name").Index) = _
.Cells(ZeileVP, SpalteVP("ASP-Name").Index)
rngVersand.Cells(ZeileVers, SpalteVers("Infomaterial per Post").Index) = _
.Cells(ZeileVP, SpalteVP("Infomaterial per Post").Index)
rngVersand.Cells(ZeileVers, SpalteVers("Infomaterial per Mail").Index) = _
.Cells(ZeileVP, SpalteVP("Infomaterial per Mail").Index)
rngVersand.Cells(ZeileVers, SpalteVers("Datum Änderung").Index) = _
.Cells(ZeileVP, SpalteVP("Datum Änderung").Index)
End If
End If
End If
Next
End With
End If
Next
Application.ScreenUpdating = True
End Sub