@Denny zu Makro für WE Verteilung
15.03.2019 17:14:58
Rob
Dein Post ist leider zu alt und deshalb nicht mehr im Forum aufzufinden. Zu Deiner Rückfrage - _ mit
if isempty(Range) = False then
kannst Du abfangen, dass der Debugger erscheint, wenn es keine Einträge in Tabellle A oder C gibt:PS: Ich habe den Code nochmal etwas angepasst (Variablen-Namen für Anzahl Artikel und Filialen z.B.)
Sub Zusammenfassen()
Dim i, x, lastRow, AnzahlArtikelB, AnzahlArtikelD, AnzahlFilialenA, AnzahlFilialenC As Integer
Dim FilialenA, FilialenC As Range
Dim TabA, TabB, TabC, TabD As Worksheet
Set TabA = Sheets("Tab A")
Set TabB = Sheets("Tab B")
Set TabC = Sheets("Tab C")
Set TabD = Sheets("Tab D")
AnzahlArtikelB = TabB.Cells(Rows.Count, 2).End(xlUp).Row
AnzahlArtikelD = TabD.Cells(Rows.Count, 2).End(xlUp).Row
AnzahlFilialenA = TabA.Cells(Rows.Count, 1).End(xlUp).Row - 1
AnzahlFilialenC = TabC.Cells(Rows.Count, 1).End(xlUp).Row - 1
Set FilialenA = TabA.Range("A2:A" & TabA.Range("A2").End(xlDown).Row)
Set FilialenC = TabC.Range("A2:A" & TabC.Range("A2").End(xlDown).Row)
With Sheets("Tab E")
If IsEmpty(TabA.Range("A2")) = False Then
'FÜR ALLE ARTIKEL AUS TAB B
FilialenA.Copy .Range("N6")
For x = 1 To AnzahlFilialenA
.Cells(x + 5, 15).Value = TabB.Cells(18, 2).Value
Next x
Call KopiereArtikel("Tab B", "Tab E", AnzahlFilialenA, AnzahlArtikelB, FilialenA)
End If
If IsEmpty(TabC.Range("A2")) = False Then
'FÜR ALLE ARTIKEL AUS TAB D
FilialenC.Copy .Range("N" & .Cells(Rows.Count, 14).End(xlUp).Row + 1)
lastRow = .Cells(Rows.Count, 15).End(xlUp).Row + 1
For x = lastRow To AnzahlFilialenC + lastRow - 1
.Cells(x, 15).Value = TabD.Cells(18, 2).Value
Next x
Call KopiereArtikel("Tab D", "Tab E", AnzahlFilialenC, AnzahlArtikelD, FilialenC)
End If
End With
End Sub
Private Function KopiereArtikel(TabelleQuelle, TabelleZiel As String, ByVal AnzahlFilialen, _
ByVal AnzahlArtikel As Integer, ByVal Filialen As Range)
Dim x, i, lastRow As Integer
With Sheets(TabelleZiel)
For x = 19 To AnzahlArtikel
lastRow = .Cells(.Rows.Count, 14).End(xlUp).Row + 1
Filialen.Copy .Range("N" & lastRow)
For i = 1 To AnzahlFilialen
lastRow = .Cells(.Rows.Count, 15).End(xlUp).Row + 1
.Cells(lastRow, 15).Value = Sheets(TabelleQuelle).Range("B" & x).Value
Next i
Next x
End With
End Function