AW: Zwei voneinander abhängige Pivottabellen
12.11.2014 07:22:39
K-Pax
Hallo nochmal.
Leider kam hier bis jetzt keine Antwort. Vielleicht war es ohne Bsp. auch zu schwierig zu verstehen.
Naja habs mittlerweile irgendwie hinbekommen. Zwar nicht unbedingt schön, aber immerhin.
Könnte mir vielleicht jemand noch Verbesserungen (Optimierungen) vorschlagen für den Code.
Insbesondere für das sub "copy"? Eine Schleife wäre deutlich eleganter. Ich kam nur nicht drauf, wie ich den Versatz dynamisch reinbekomme.
VG
K-Pax
Anbei nun auch der Code:
Option Explicit
Sub Lagerort_Trigger()
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Sheets("tbl_Lagerorte").Range("A1:N76").ClearContents
Sheets("Pivot_Lagerorte").Range("E1:K50").ClearContents
Sheets("Pivot_Lagerorte").Range("M5:N50").ClearContents
Sheets("Prozesse").Range("A1:G50").copy
Sheets("Pivot_Lagerorte").Range("E1") _
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("tbl_Lagerorte").Range("P1").Value = Sheets("Pivot_Lagerorte").Range("F5").Value
Sheets("tbl_Lagerorte").Range("Q1").Value = "FA" & " " & Sheets("Pivot_Lagerorte").Range(" _
E5").Value
Sheets("Pivot_Lagerorte").Range("I5:I50").copy
Sheets("Pivot_Lagerorte").Range("M5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks _
:=False, Transpose:=False
Sheets("Pivot_Lagerorte").Range("G5:G50").copy
Sheets("Pivot_Lagerorte").Range("N5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks _
:=False, Transpose:=False
Sheets("Pivot_Lagerorte").Range("F5").copy
Call Herstelldatum_zuText 'durch das Umwandeln zu Text soll vermieden werden, dass die _
Pivottabelle mit den Werten eventuell nicht klarkommt.
Call Artikelnummer_zuText
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
Call Lagerorte
End Sub
Sub Herstelldatum_zuText()
With Worksheets("Pivot_Lagerorte")
'Zahlen in Spalte 12 in Text umwandeln
Call NumbersToText(Bereich:=.Range(.Cells(5, 13), .Cells(.Rows.Count, 13).End(xlUp)))
End With
End Sub
Sub Artikelnummer_zuText()
With Worksheets("Pivot_Lagerorte")
'Zahlen in Spalte 13 in Text umwandeln
Call NumbersToText(Bereich:=.Range(.Cells(5, 14), .Cells(.Rows.Count, 14).End(xlUp)))
End With
End Sub
Sub NumbersToText(Bereich As Range)
'fügt vor Zahlen ein Hochkomma ein zur Umwandlung in Text
'sinnvoll bei Ziffernfolgen, die eigentlich keine Zahlen sind (PLZ, Artikelnummern etc.)
Dim Zelle As Range
For Each Zelle In Bereich
If Not IsEmpty(Zelle.Text) Then
Zelle.Value = "'" & Zelle.Text
If Zelle.Offset(0, -1).Value = "" Then
Zelle.Value = ""
End If
End If
Next
End Sub
Sub Lagerorte()
Dim Zeile As Long, ws As Worksheet
Dim Spalte As Long
On Error GoTo ErrorHandler
Set ws = Worksheets("Pivot_Lagerorte")
With ws
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
For Zeile = 5 To 50 'Zeilen ab Zeile 1 bis 50 abarbeiten
If .Cells(Zeile, 13).Value "" And .Cells(Zeile, 14) "" Then 'Prüfen, ob Wertepaare _
in Spalte M und N vorhanden
.PivotTables("PVT").RefreshTable
.PivotTables("PVT").ClearAllFilters
.PivotTables("PVT").PivotFields("Artikelnummer").CurrentPage = .Cells(Zeile, 14).Value
.PivotTables("PVT").PivotFields("Herstelldatum").CurrentPage = .Cells(Zeile, 13).Value
Call copy
Else
End If
Next
End With
Sheets("tbl_Lagerorte").Select
Range("A1").Select
With Application
.CutCopyMode = False
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
ErrorHandler:
Resume Next
End Sub
Sub copy()
' hier soll nun so eingefügt werden, dass man eine Tabelle erhält mit je drei Blöcken _
je Reihe. _
Ist eine Reihe voll soll die nächste Reihe wieder in der ersten Spalte beginnen usw. _
Kann man das auch in einer Schleife machen? Ich wusste nicht wie ich den Versatz _
hinbekomme.
Worksheets("Pivot_Lagerorte").Range("A1:D10").copy
If Sheets("Lagerorte").Range("A1") = "" Then
Sheets("Lagerorte").Range("A1" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("F1") = "" Then
Sheets("Lagerorte").Range("F1" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("K1") = "" Then
Sheets("Lagerorte").Range("K1" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("A12") = "" Then
Sheets("Lagerorte").Range("A12" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("F12") = "" Then
Sheets("Lagerorte").Range("F12" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("K12") = "" Then
Sheets("Lagerorte").Range("K12" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("A23") = "" Then
Sheets("Lagerorte").Range("A23" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("F23") = "" Then
Sheets("Lagerorte").Range("F23" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("K23") = "" Then
Sheets("Lagerorte").Range("K23" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("A34") = "" Then
Sheets("Lagerorte").Range("A34" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("F34") = "" Then
Sheets("Lagerorte").Range("F34" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("K34") = "" Then
Sheets("Lagerorte").Range("K34" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("A45") = "" Then
Sheets("Lagerorte").Range("A45" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("F45") = "" Then
Sheets("Lagerorte").Range("F45" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("K45") = "" Then
Sheets("Lagerorte").Range("K45" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("A56") = "" Then
Sheets("Lagerorte").Range("A56" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("F56") = "" Then
Sheets("Lagerorte").Range("F56" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("K56") = "" Then
Sheets("Lagerorte").Range("K56" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("A67") = "" Then
Sheets("Lagerorte").Range("A67" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("F67") = "" Then
Sheets("Lagerorte").Range("F67" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf Sheets("Lagerorte").Range("K67") = "" Then
Sheets("Lagerorte").Range("K67" _
).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Else: MsgBox ("Nicht genug freie Felder, bitte wende dich an den Administrator")
End If
End Sub