Ich habe eine Arbeitsmappe mit 70 plus Blatt. Jedes Blatt wird erstellt und benannt, und ich lege entsprechende Daten mithilfe von Filtern in das Arbeitsblatt ein. Der Datenbereich kann sich Woche für Woche ändern. Ich habe ein vba-Programm geschrieben, um alles zu tun, aber Pivot-Tabellen in jedem Arbeitsblatt mit den eindeutigen gefilterten Daten zu erstellen. Meine Frage ist, wie erstelle ich eine Pivot-Tabelle in jedem Arbeitsblatt innerhalb der for-Schleife? Ich habe abgezogen, dass das Problem in meinem Code unten der Quelldatenabschnitt im Code ist. Der Datenbereich für jede Registerkarte ist unterschiedlich (die Spalten bleiben gleich, die Anzahl der Zeilen ist jedoch unterschiedlich). Muss ich die Pivot-Tabellen auch umbenennen, wenn sie innerhalb der Schleife durchlaufen?Erstellen Sie Pivot-Tabellen innerhalb einer for-Schleife vba
Sub Ptloop()
dim x as long
dim SorceRange as Range
dim k as long
'start of first generated work sheet
x=4
'number of worksheets
k=75
Set SourceRange = Range("A4", ActiveCell.End(xlDown).End(xlToRight))
For Each Worksheet In ActiveWorkbook.Sheets
If x <= k Then
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
Sheets(x).SourceRange, Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:=Sheets(x).Cells(4, 21), TableName:="PivotTable3", DefaultVersion _
:=xlPivotTableVersion14
x = x + 1
Else
Exit For
End If
Next Worksheet
End Sub
Sie müssen Dynamic Range verwenden. Weitere Informationen finden Sie in diesem Artikel [Erstellen dynamischer Bereiche mit einem Makro] (http://www.contextures.com/xlNames03.html#Pivot) – skkakkar
Bringen Sie das 'SourceRange'-Set in die' For-Schleife' und qualifizieren Sie es für das 'ws' . So 'Set SourceRange = Worksheet.Range (" A4 ", Worksheet.Range (" A4 ") l.End (xlDown) .End (xlToRight))'. Sie können jeden PT mit 'PivoTable & x' benennen, wenn Sie möchten, dass sie anders sind. Es ist jedoch nicht notwendig, wenn sie alle auf verschiedenen Blättern sind. –