AW: Blattenamen Pivot. Mehrere Konsolidierungsbereiche
21.06.2010 01:22:55
windalf
Hallo ok habe ich endlich selbst rausbekommen ... geht mir Seitenfeldern...
Ich wollte das ganze Pivotspielchen in nem Marko für mich beschleunigen. Allerdings habe ich ein Problem mit Variablen Feldgrößen bei einem 2-d-Array (die erste Diemension ist ja nicht frei definierbar...
Sub createFastPivot()
On Error GoTo endsub:
Dim ws As Worksheet, ws_temp As Worksheet
Dim r As Range
Dim str_range(1 To 2, 1 To 2) As String
Dim i As Long
If ActiveWorkbook.Windows(1).SelectedSheets.Count = 1 Then 'wenn nur ein Blatt markiert
Set r = Selection
If r.Cells.Count = 1 Then Set r = ActiveSheet.UsedRange
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=r).CreatePivotTable _
TableDestination:="", tablename:="PivotTable1", DefaultVersion:=xlPivotTableVersion10
Else 'wenn mehrere Blätter markiert, dann baue ein Pivot mit Konsolidierungsbereichen
'ReDim Preserve str_range(1 To ActiveWorkbook.Windows(1).SelectedSheets.Count)
i = 1
For Each ws In ActiveWorkbook.Windows(1).SelectedSheets
str_range(i, 1) = ws.UsedRange.Address(ReferenceStyle:=xlR1C1, External:=True)
str_range(i, 2) = ws.Name
i = i + 1
Next ws
ActiveSheet.Select 'Kann kein Pivot erstellen, wenn mehrere Blätter markiert sind...
ActiveWorkbook.PivotCaches.Add(SourceType:=xlConsolidation, SourceData:=str_range). _
CreatePivotTable TableDestination:="", tablename:="PivotTable1", DefaultVersion:=xlPivotTableVersion10
End If
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
endsub:
End Sub
Mein Problem ist, ich will natürlich nicht, dass die erste Dimension von 1 bis 2, sondern von 1 bis ActiveWorkbook.Windows(1).SelectedSheets.Count geht. Gibt es da irgend einen Trick wie ich das Problem umgehen kann? Kann man bei SourceData:=str_range irgendwie was anderes als nen 2-d Array übergeben wenn man auch Seitenfelder nutzen möchte und wenn ja wie muss ich den Datentyp aufbauen?
Danke Gruß Windi