AW: Datensätze in andere Tabellen kopieren
21.02.2022 20:28:55
Yal
Hallo Steve,
die richtige Antwort bekommst Du mit de richtige Frage.
In meiner Lösung werden alle Datensätze aus der Quelle gelesen.
Wenn Du gezielt auf 3040 filtern möchtest, ist es eine leicht abweichende Frage.
Da deine Quell-Liste eine aktive Tabelle ist, könntest Du auf "3040" filtern und diese Code einsetzen:
Sub Liste_druchgehen()
Dim E
Dim W As Worksheet
With ThisWorkbook.Worksheets("Tabelle1").ListObjects("Tabelle1")
For Each E In .ListColumns("Artikel").DataBodyRange.Cells
If E.EntireRow.Visible Then
Set W = SelectOrCreate(E)
E.EntireRow.Copy W.Range("A99999").End(xlUp).Offset(1)
End If
Next
End With
End Sub
Private Function SelectOrCreate(ByVal Blattname As String) As Worksheet
Dim W As Worksheet
On Error Resume Next
Set W = Worksheets(Blattname)
If W Is Nothing Then
Set W = Worksheets.Add(After:=Worksheets(Worksheets.Count))
Worksheets("Tabelle1").Range("A1:AZ1").Copy W.Range("A1")
W.Name = Blattname
End If
Set SelectOrCreate = W
End Function
Wenn Du genau hinschaust, siehst Du die Prüfung "If E.EntireRow.Visible Then", also es werden nur die Zeilen rüberkopiert, die den Filter entsprechen und daher sichtbar sind.
sollte eine Artikelnummer kein Blatt haben, wird in aktueller Stand ein leeres Blatt hergestellt. Solltest Du aber die Kopie einer Vorlage, dann sieht es so aus:
Private Function SelectOrCreate(ByVal Blattname As String) As Worksheet
Dim W As Worksheet
On Error Resume Next
Set W = Worksheets(Blattname)
If W Is Nothing Then
Set W = Worksheets("Vorlage").Copy(After:=Worksheets(Worksheets.Count))
W.Name = Blattname
End If
Set SelectOrCreate = W
End Function
Es ist so, dass deine Vorgaben kaum ohne VBA zu erfüllen sind. Da kommst Du nicht drum, dich damit auseinander zu setzen. Aber keine falsche Scheu: es liest sich -fast- wie eine normale Sprache. Und Übung macht den Meister. Für den Rest gibt es das Forum.
VG
Yal