Pivot-Tabellen programmieren
Transcription
Pivot-Tabellen programmieren
Kapitel 17 Pivot-Tabellen programmieren Der Pivot-Tabellen-Assistent 500 Pivot-Tabellen-Objekte 502 Pivot-Tabellen löschen 503 Eine Pivot-Tabelle erzeugen 504 Gleichzeitig zwei Pivot-Tabellen erzeugen 505 Berechnungen in Pivot-Tabellen 508 Eine Pivot-Tabelle automatisch aktualisieren 510 Pivot-Tabelle sortieren 511 Pivot-Tabellenfelder vertauschen 511 Pivot-Tabellenfelder formatieren 512 Eine komplett formatierte Pivot-Tabelle erzeugen 514 499 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Auswertungstechniken anwenden In diesem Kapitel: Kapitel 17 Pivot-Tabellen programmieren Oftmals steht man als Excel-Anwender vor der Aufgabe, bestimmte Daten aus einer umfangreichen Tabelle auszuwerten. Mit verschiedenen Formeln und Filtern kann man zwar vieles erreichen, dennoch reichen diese Möglichkeiten oft nicht aus. Der Einsatz von Pivot-Tabellen drängt sich auf. Damit lassen sich in der Regel innerhalb kürzester Zeit große Datenmengen auf einfache Weise auswerten. Das Schöne daran ist, dass man die Daten per Mausklick in den verschiedensten Varianten zusammenstellen und wieder umstellen kann, ohne dabei die Originaltabelle zu berühren. PivotTabellen kann man sich im Grunde genommen vorstellen wie eine Schablone. Die Daten darin sind lediglich zur Quelle verlinkt. Das Ändern von Daten in der Pivot-Tabelle selbst ist von daher nicht zugelassen. Die Möglichkeiten von Pivot-Tabellen sind schier unerschöpflich. Pivot-Tabellen können auf verschiedenste Weise gestaltet werden. Es stehen diverse Berechnungsmöglichkeiten und Optionen zur Verfügung. Pivot-Daten können sogar in einem Pivot-Diagramm grafisch dargestellt werden. Die nachfolgenden Beispiele werden Ihnen zeigen, wie Sie mit dem Objekt PivotTables und den hierarchisch untergeordneten Objekten, wie zum Beispiel PivotField, umgehen können. Der Pivot-Tabellen-Assistent Bevor wir mit dem Programmieren von Pivot-Tabellen beginnen, werden wir zuerst Schritt für Schritt eine Pivot-Tabelle erstellen. In unserer Beispieldatei besteht eine Tabelle, die ausgewertet werden soll. Um daraus eine Pivot-Tabelle entstehen zu lassen, wird zuerst das Dialogfeld PivotTable erstellen geöffnet. Dies geschieht über die Multifunktionsleiste auf der Registerkarte Einfügen in der Gruppe Tabellen mit einem Klick auf die Schaltfläche PivotTable. Abbildg. 17.1 PivotTable erstellen Im Dialogfeld PivotTable erstellen geben Sie den Quellbereich Ihrer Daten an sowie den Zielbereich, in den die Pivot-Tabelle eingefügt werden soll. Sobald dies geschehen ist, erscheinen auf der ExcelOberfläche die notwendigen Elemente, um die Pivot-Tabelle zusammenzustellen. 500 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Der Pivot-Tabellen-Assistent Abbildg. 17.2 Vorgaben zum Erstellen der Pivot-Tabelle Sie können die Pivot-Tabelle nun nach Belieben gestalten, indem Sie in der PivotTable-Feldliste die Felder aktivieren, die im Pivot-Tabellen-Bereich erscheinen sollen. Die aktiven Felder können Sie in den unteren Bereich der Feldliste ziehen. Damit beeinflussen Sie das Layout. Eine fertige Pivot-Tabelle Auswertungstechniken anwenden Abbildg. 17.3 501 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Kapitel 17 Pivot-Tabellen programmieren Pivot-Tabellen-Objekte Falls Sie Ihre Pivot-Tabellen immer nach dem gleichen Grundprinzip erstellen möchten, können Sie sich die Schritte des Assistenten sparen, indem Sie eine geeignete Prozedur erstellen. Wenn Sie Ihren Code per Makrorekorder aufzeichnen, muss dieser in der Regel zuerst einmal übersichtlich angeordnet werden. Ohne die notwendigsten Pivot-Tabellen-Objekte zu kennen, fällt es schwer, einen aufgezeichneten Code zu bereinigen. Deshalb finden Sie in der nachfolgenden Tabelle die wichtigsten Objekte und deren Beschreibung sowie einen Hierarchieüberblick: Tabelle 17.1 Abbildg. 17.4 Die wichtigsten Pivot-Tabellen-Objekte Objekte Beschreibung PivotCache Der Zwischenspeicher (Daten-Buffer) der Pivot-Tabellendaten. Unter Zugabe von AddMethode und weiteren Anweisungen wird die Pivot-Tabelle erzeugt (ein WorkbookObjekt). PivotTables Die Pivot-Tabelle selbst (ein Worksheet-Objekt) PivotFields Die Felder der Pivot-Tabelle (ein PivotTable-Objekt) PivotItems Jedes Pivot-Tabellenfeld enthält eine Ansammlung an Pivot-Items. In unserem Beispiel sind das u.a. »Rotwein«, »Weißwein«, »Champagner« usw. (ein PivotField-Objekt). Hierarchie der Objekte aus Tabelle 17.1 Wissenswert ist zudem, dass eine Pivot-Tabelle in die folgenden vier Bereiche aufgeteilt ist, in die die Datenfelder PivotFields gezogen werden können: 502 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Pivot-Tabellen löschen Tabelle 17.2 Pivot-Tabellen-Bereiche Element Konstante Beschreibung Seite xlPageField Seitenfelder Zeile xlRowField Anordnung der Daten in Zeilen Spalte xlColumnField Anordnung der Daten in Spalten Daten xlDataField Felder für den zu berechnenden Datenbereich Die Elemente entsprechen dem folgenden Pivot-Tabellen-Aufbau: Abbildg. 17.5 Pivot-Tabellen-Aufbau Pivot-Tabellen löschen Vielleicht klingt es etwas verfrüht, wenn wir uns zuerst ansehen, wie Pivot-Tabellen per VBA aus einem Tabellenblatt gelöscht werden, noch bevor wir überhaupt eine Pivot-Tabelle erstellt haben. Da jedoch das Löschen alter Pivot-Tabellen ein Bestandteil einer Prozedur ist, die eine neue PivotTabelle erzeugt, werden wir diesen Schritt vorziehen. Die folgende Prozedur bedient sich einer For Each-Schleife, die sämtliche im Tabellenblatt enthaltenen Pivot-Tabellen löscht. Wichtig dabei ist die Eigenschaft TableRange2, denn sie bezieht die Seitenfelder mit ein, während TableRange1 die Seitenfelder nicht einschließt. Selbst wenn keine Pivot-Tabelle im aktiven Tabellenblatt enthalten ist, erzeugt diese Prozedur keinen Fehler. Dadurch ersparen wir uns eine Fehlerbehandlung, wie z.B. ein On Error Resume Next für unser nächstes Beispiel. Listing 17.1 Pivot-Tabellen löschen With ActiveSheet For Each pt In .PivotTables pt.TableRange2.Delete Next pt End With End Sub Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe nennt sich Bsp17_01.xlsm. Die Prozedur ist im Modul mdl_01_PTDelete untergebracht. 503 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Auswertungstechniken anwenden Sub DeleteAllPivottables() Dim pt As PivotTable Kapitel 17 Pivot-Tabellen programmieren Eine Pivot-Tabelle erzeugen Nachdem Sie nun die wichtigsten Objekte kennen und auch das Löschen von Pivot-Tabellen bekannt ist, können wir per VBA eine neue Pivot-Tabelle erzeugen. Abbildg. 17.6 Quelldaten und Pivot-Tabelle In der ersten For-Schleife werden bereits vorhandene Pivot-Tabellen des aktiven Tabellenblattes gelöscht (wie zuvor beschrieben). Dies ist erforderlich, da die Prozedur sonst mit einer Fehlermeldung antworten würde, sofern im Zielbereich bereits eine Pivot-Tabelle vorhanden wäre. Danach werden mit Set die Objekte referenziert, die zum Erstellen der Pivot-Tabelle erforderlich sind. Da unsere Pivot-Tabelle auf demselben Tabellenblatt ausgegeben werden soll, auf dem auch die Daten zu finden sind, geben wir bei der zweiten Referenzierung den Zielort an: TableDestination:=ActiveSheet.Range("H1") In der zweiten With-Anweisung werden die vier Felder aufbereitet, die unsere Pivot-Tabelle ausmachen. Wahlweise können auch weitere Felder des Quellbereiches mit einbezogen werden, oder Sie können die Felder anders anordnen. Am Ende der Prozedur werden die Spalten automatisch in der Breite angepasst. Danach werden die referenzierten Objekte wieder freigegeben. Listing 17.2 Pivot-Tabelle per VBA erzeugen Sub CreatePivotTable() Dim ptCache As PivotCache Dim ptTable As PivotTable Dim i As Integer ' Alle Pivot-Tabellen des aktiven Blattes löschen With ActiveSheet For Each ptTable In .PivotTables ptTable.TableRange2.Delete Next ptTable End With 504 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Gleichzeitig zwei Pivot-Tabellen erzeugen Listing 17.2 Pivot-Tabelle per VBA erzeugen (Fortsetzung) ' Neue Pivot-Tabelle mit dynamischer Zeilenzahl erstellen Set ptCache = ActiveWorkbook.PivotCaches.Add _ (SourceType:=xlDatabase, _ SourceData:="A1:F" & _ ActiveSheet.UsedRange.Rows.Count) ' Pivot-Tabelle auf aktuellem Tabellenblatt erstellen Set ptTable = ptCache.CreatePivotTable _ (TableDestination:=ActiveSheet.Range("H1"), _ TableName:="MyPivotTable") With ptTable .PivotFields("Kaufdatum").Orientation = xlPageField .PivotFields("Kunde").Orientation = xlRowField .PivotFields("Getränk").Orientation = xlColumnField .PivotFields("Total").Orientation = xlDataField End With ' Spaltenbreite automatisch anpassen Columns("A:N").AutoFit Set ptCache = Nothing Set ptTable = Nothing End Sub Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe nennt sich Bsp17_01.xls. Die Prozedur ist im Modul mdl_02_PTCreate untergebracht. Gleichzeitig zwei Pivot-Tabellen erzeugen Auf Wunsch können Sie gleichzeitig zwei unterschiedliche Pivot-Tabellen auf einem Tabellenblatt erzeugen. Beim Referenzieren der Datenquelle können Sie nun als Source auf den zuvor definierten Namen zugreifen: SourceData:="MeinePivotTabelle" Damit die erste Pivot-Tabelle auf einem neuen Tabellenblatt entsteht, wird keine Destination angegeben: 505 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Auswertungstechniken anwenden Damit die Datenquelle in unserem Code leicht anzusprechen ist, weisen wir ihr einen Namen zu. Gehen Sie dazu wie folgt vor: 1. Markieren Sie den Datenbereich. 2. Drücken Sie die Tastenkombination (Strg)+(F3), um den Namens-Manager aufzurufen. Klicken Sie darin auf die Schaltfläche Neu, um das Dialogfeld Namen definieren zu öffnen. 3. Geben Sie in die Eingabezeile den Namen MeinePivotTabelle ein. 4. Klicken Sie auf die Schaltfläche OK, um das Dialogfeld zu schließen. Kapitel 17 Pivot-Tabellen programmieren TableDestination:="" Die zweite Pivot-Tabelle soll auf demselben (neuen) Tabellenblatt erstellt werden wie die erste. Wir geben deshalb bei der Referenzierung das Ziel vor: TableDestination:=Worksheets(1).Rows(Rows.Count).End(xlUp).Offset(5, 0) Da wir nicht wissen, wie viele Zeilen die erste Pivot-Tabelle einnimmt, müssen wir dynamisch vorgehen. Das neu erzeugte Tabellenblatt mit der ersten Pivot-Tabelle befindet sich an erster Stelle in der Arbeitsmappe Worksheets(1). Die zweite Pivot-Tabelle soll unterhalb eingefügt werden Rows(Rows.Count).End(xlUp), wobei ein Abstand von zwei Zeilen entstehen soll Offset(5, 0). Auf den ersten Blick ist es etwas verwirrend, dass für zwei Zeilen bei Offset der Zeilenindex mit 5 verwendet wird. Dies begründet sich darin, dass die eigentliche Pivot-Tabelle ausschließlich des Seitenfeldes gerechnet werden muss. Abbildg. 17.7 Zwei Pivot-Tabellen auf einem Tabellenblatt HINWEIS Beachten Sie, dass für jede Pivot-Tabelle ein eigener Name definiert werden muss: TableName:="MyFirstPivotTable" TableName:="MySecondPivotTable" 506 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Gleichzeitig zwei Pivot-Tabellen erzeugen Der vollständige Code sieht somit wie folgt aus: Listing 17.3 Zwei Pivot-Tabellen auf einem neuen Tabellenblatt erzeugen Sub CreateTwoPivotTables() Dim ptCache As PivotCache Dim ptTable As PivotTable Dim i As Integer ' Die Datenquelle angeben Set ptCache = ActiveWorkbook.PivotCaches.Add _ (SourceType:=xlDatabase, _ SourceData:="MeinePivotTabelle") ' ---------------------------------------------------' DIE ERSTE PIVOT-TABELLE ERSTELLEN ' ---------------------------------------------------Set ptTable = ptCache.CreatePivotTable _ (TableDestination:="", _ TableName:="MyFirstPivotTable") ' Pivot-Tabellenfelder anordnen With ptTable .PivotFields("Kaufdatum").Orientation = xlPageField .PivotFields("Kunde").Orientation = xlRowField .PivotFields("Getränk").Orientation = xlColumnField .PivotFields("Total").Orientation = xlDataField End With ' ---------------------------------------------------' DIE ZWEITE PIVOT-TABELLE ERSTELLEN ' ---------------------------------------------------Set ptTable = ptCache.CreatePivotTable _ (TableDestination:=Worksheets(1). _ Rows(Rows.Count).End(xlUp). _ Offset(5, 0), _ TableName:="MySecondPivotTable") ' Pivot-Tabellenfelder anordnen With ptTable .PivotFields("Kunde").Orientation = xlPageField .PivotFields("Kaufdatum").Orientation = xlRowField .PivotFields("Getränk").Orientation = xlColumnField .PivotFields("Total").Orientation = xlDataField End With Set ptCache = Nothing Set ptTable = Nothing End Sub Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe nennt sich Bsp17_02.xlsm. Die Prozedur ist im Modul mdl_01_PTCreateTwo untergebracht. 507 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Auswertungstechniken anwenden ' Spaltenbreite automatisch anpassen Columns("A:N").AutoFit Kapitel 17 Pivot-Tabellen programmieren Berechnungen in Pivot-Tabellen In unseren bisherigen Beispielen haben wir im Datenbereich jeweils die Summe der Datenfelder ausgegeben. Auf Wunsch können Sie die Berechnungsmethode ändern. Manuell gehen Sie dabei wie folgt vor: 1. Klicken Sie mit der rechten Maustaste auf den Datenbereich. 2. Wählen Sie im Kontextmenü den Eintrag Wertefeldeinstellungen aus, um das gleichnamige Dialogfeld zu öffnen. 3. Wählen Sie im Listenfeld die gewünschte Funktion aus und klicken Sie auf die Schaltfläche OK, um das Dialogfeld wieder zu schließen. Abbildg. 17.8 Berechnungsmethoden für Pivot-Tabellenfelder Der Tabelle 17.3 können Sie die verfügbaren Funktionen und deren Konstanten entnehmen. Tabelle 17.3 Berechnungsmöglichkeiten für Pivot-Tabellenfelder Konstante Index Funktion xlCount –4112 Anzahl xlCountNums –4113 Anzahl Zahlen xlMax –4136 Maximum xlMin –4139 Minimum xlAverage –4106 Mittelwert xlProduct –4149 Produkt xlStDev –4155 Standardabweichung (Stichprobe) xlStDevP –4156 Standardabweisung (Grundgesamtheit) xlSum –4157 Summe xlUnknown 1000 Unbekannt 508 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Berechnungen in Pivot-Tabellen Tabelle 17.3 Berechnungsmöglichkeiten für Pivot-Tabellenfelder (Fortsetzung) Konstante Index Funktion xlVarP –4165 Varianz (Grundgesamtheit) xlVar –4164 Varianz (Stichprobe) Um das Auswahlverfahren für die am häufigsten benutzten Funktionen zu verkürzen, erstellen wir in unserem Beispiel auf dem Tabellenblatt ein Zellen-Dropdown-Feld. Selektieren Sie die Zelle, in der die gewünschten Funktionen zur Auswahl stehen sollen, zum Beispiel die Zelle H10. 1. Klicken Sie auf der Registerkarte Daten in der Gruppe Datentools auf den Befehl Datenüberprüfung. 2. Wählen Sie im Kombinationsfeld Zulassen den Wert Liste aus. 3. Geben Sie unter Quelle die Namen der gewünschten Funktionen ein. Zum Beispiel: Summe; Anzahl;Mittelwert;Minimum;Maximum. 4. Klicken Sie auf die Schaltfläche OK, um das Dialogfeld Datenüberprüfung zu schließen. Abbildg. 17.9 Funktion über ein Zellen-Dropdown-Feld auswählen Zu Beginn der Prozedur wird in der If-Entscheidung festgelegt, dass die Ereignisprozedur nur aufgeführt werden soll, wenn in der Zelle H10 eine Auswahl getroffen wird. In der Select Case-Entscheidung wird, je nach Auswahl der Funktion, die Berechnung für die PivotTabellenfelder geändert. Im Kopf der With-Anweisung wird die erste Zelle im Datenbereich angegeben. Me ist eine verkürzte Form, um die Pivot-Tabelle anzusprechen. 509 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Auswertungstechniken anwenden Damit bei der Auswahl der gewünschten Funktion die Pivot-Tabelle die Berechnung umstellt, benötigen wir eine Change-Ereignisprozedur, die an das Tabellenblatt gebunden ist. Kapitel 17 Listing 17.4 Pivot-Tabellen programmieren Ereignisprozedur für das Berechnen aufgrund der Auswahl aus dem Zellen-Dropdown-Feld Private Sub Worksheet_Change(ByVal Target As Range) ' Prozedur nur ausführen, wenn sich in Zelle "H10" etwas ändert If Target.Address <> "$H$10" Then Exit Sub End If ' Berechnungen für Zellendropdown-Auswahl With Me.Range("I5") Select Case Range("H10") Case "Summe" .PivotField.Function = xlSum Case "Anzahl" .PivotField.Function = xlCount Case "Mittelwert" .PivotField.Function = xlAverage Case "Minimum" .PivotField.Function = xlMin Case "Maximum" .PivotField.Function = xlMax End Select End With End Sub Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe nennt sich Bsp17_03.xlsm. Die Ereignisprozedur ist im Modul Tabelle1 untergebracht. Eine Pivot-Tabelle automatisch aktualisieren Wenn Daten in der Quelltabelle geändert werden, wird die Pivot-Tabelle nicht automatisch aktualisiert. Die Aktualisierung muss explizit ausgeführt werden. Klicken Sie dazu mit der rechten Maustaste auf die Pivot-Tabelle und wählen Sie aus dem Kontextmenü den Befehl Aktualisieren. Wenn Sie veranlassen möchten, dass die Pivot-Tabelle bei jeder Änderung der Quelltabelle automatisch aktualisiert wird, arbeiten Sie am besten mit dem Worksheet_Change-Ereignis. Dabei muss der Quellbereich mittels Intersect eingeschränkt werden, da die Neuberechnung sonst zu lange dauern würde. Es wird zudem die Bildschirmaktualisierung (ScreenUpdating) deaktiviert, um die Geschwindigkeit der Prozedur zu erhöhen und das Bildschirmflackern zu unterdrücken. Die Methode zur Aktualisierung der Pivot-Tabelle lautet RefreshTable. Listing 17.5 Pivot-Tabelle aktualisieren Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False If Not (Application.Intersect(Range("A1:F40"), Target) _ Is Nothing) Then Me.PivotTables(1).RefreshTable End If Application.ScreenUpdating = True End Sub 510 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Pivot-Tabellenfelder vertauschen Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe nennt sich Bsp17_04.xlsm. Die Ereignisprozedur ist im Modul Tabelle1 untergebracht. Pivot-Tabelle sortieren Pivot-Tabellenfelder können auf- oder absteigend sortiert werden. Der Aufruf über die Multifunktionsleiste erfolgt mit PivotTable-Tools/Optionen/Sortieren. Die beiden folgenden Prozeduren zeigen, wie Daten eines Pivot-Tabellenfeldes wahlweise auf- oder absteigend sortiert werden können. Zur Sortierung wird die Methode AutoSort verwendet. Die Konstante für aufsteigend lautet xlAscending und die Konstante für absteigend xlDescending. Listing 17.6 Pivot-Tabellenfeld aufsteigend sortieren Sub SortAscending() ActiveSheet.PivotTables("MyPivotTable"). _ PivotFields("Kunde"). _ AutoSort xlAscending, "Kunde" End Sub Listing 17.7 Pivot-Tabellenfeld absteigend sortieren Sub SortDescending() ActiveSheet.PivotTables("MyPivotTable"). _ PivotFields("Kunde"). _ AutoSort xlDescending, "Kunde" End Sub Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe nennt sich Bsp17_05.xlsm. Die Prozeduren sind im Modul mdl_01_PTSort untergebracht. Pivot-Tabellenfelder vertauschen Um die Felder per VBA gegeneinander auszutauschen, verwenden Sie die Eigenschaft Orientation, gefolgt von der entsprechenden Konstanten (xlColumnField oder xlRowField). Die folgende Prozedur ist an eine ActiveX-Umschaltfläche gebunden. Bei jedem Klick auf die Umschaltfläche werden die beiden Felder miteinander vertauscht. 511 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Auswertungstechniken anwenden In unseren bisherigen Beispieldateien haben wir jeweils mit den Pivot-Tabellenfeldern Kunde und Getränk gearbeitet, wobei das eine in der Spalte und das andere in der Zeile angeordnet war. Auf Wunsch können Sie die beiden Felder gegeneinander vertauschen. Manuell können Sie die Felder nach Belieben vertauschen, indem Sie sie mit der Maus an die gewünschte Stelle im Pivot-Tabellenlayout ziehen. Kapitel 17 Listing 17.8 Pivot-Tabellen programmieren Pivot-Tabellenfelder vertauschen Private Sub ToggleButton1_Click() With ActiveSheet.PivotTables("MyPivotTable") If .PivotFields("Kunde").Orientation = xlColumnField Then .PivotFields("Kunde").Orientation = xlRowField .PivotFields("Getränk").Orientation = xlColumnField Else .PivotFields("Getränk").Orientation = xlRowField .PivotFields("Kunde").Orientation = xlColumnField End If End With End Sub Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe nennt sich Bsp17_06.xlsm. Die Ereignisprozedur ist an den ToggleButton1 gebunden. Pivot-Tabellenfelder formatieren Eine Pivot-Tabelle verfügt über drei Hauptelemente, die gestaltet werden können. Jedes Element wird durch eine andere Eigenschaft angesprochen. Welche das sind, können Sie der Abbildung 17.10 entnehmen: Abbildg. 17.10 Die drei Hauptelemente einer Pivot-Tabelle Im folgenden Code nehmen wir verschiedene Formatierungen an einigen der Pivot-Tabellenelemente vor: 512 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Pivot-Tabellenfelder formatieren Listing 17.9 Pivot-Tabellenelemente formatieren Sub MyFormatting() With ActiveSheet.PivotTables("MyPivotTable") With .PivotFields("Kunde") .LabelRange.Interior.Color = vbGreen .DataRange.Interior.Color = vbYellow End With With .PivotFields("Getränk") .LabelRange.Interior.Color = vbBlue .DataRange.Interior.Color = vbCyan End With With .PivotFields("Kaufdatum") .LabelRange.Interior.Color = vbRed .DataRange.Interior.Color = vbMagenta End With With .DataBodyRange .Interior.Color = vbBlack .Font.Color = vbWhite End With End With End Sub Abbildg. 17.11 Formatierte Pivot-Tabellenelemente Auswertungstechniken anwenden Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe nennt sich Bsp17_07.xlsm. Die Prozedur ist im Modul mdl_01_PTFormatting untergebracht. 513 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Kapitel 17 Pivot-Tabellen programmieren Eine komplett formatierte Pivot-Tabelle erzeugen Die nachfolgende Prozedur zeigt, wie eine Pivot-Tabelle fertig formatiert erzeugt werden kann. Abbildg. 17.12 Eine fertig formatierte Pivot-Tabelle erzeugen Die Beschreibung der einzelnen Formatierungen ist direkt im Code untergebracht. Listing 17.10 Formatierte Pivot-Tabelle einfügen Sub CreateFormattedPivotTable() Dim ptCache As PivotCache Dim ptTable As PivotTable Dim i As Integer With ActiveSheet For Each ptTable In .PivotTables ptTable.TableRange2.Delete Next ptTable End With Set ptCache = ActiveWorkbook.PivotCaches.Add _ (SourceType:=xlDatabase, _ SourceData:="A1:F" & _ ActiveSheet.UsedRange.Rows.Count) Set ptTable = ptCache.CreatePivotTable _ (TableDestination:=ActiveSheet.Range("H1"), _ TableName:="MyPivotTable") With ptTable .PivotFields("Kaufdatum").Orientation = xlPageField .PivotFields("Getränk").Orientation = xlRowField .PivotFields("Kunde").Orientation = xlColumnField .PivotFields("Total").Orientation = xlDataField End With 514 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Eine komplett formatierte Pivot-Tabelle erzeugen Listing 17.10 Formatierte Pivot-Tabelle einfügen (Fortsetzung) ' ----------------------------------------------' FORMATIERUNGEN ' ----------------------------------------------With ptTable ' Seitenfeld formatieren With .PivotFields("Kaufdatum") ' Farbe und fett für Feld With .LabelRange .Interior.ColorIndex = 5 ' Blau .Font.Bold = True ' Fett .Font.Color = vbWhite ' Weiß End With ' Farbe und kursiv für Daten With .DataRange .Interior.ColorIndex = 34 ' Hellblau .Font.Italic = True ' Kursiv End With End With ' Spaltenfeld formatieren With .PivotFields("Kunde") ' Farbe und fett für Feld With .LabelRange .Interior.ColorIndex = 3 .Font.Bold = True End With ' Rot ' Fett ' Farbe und kursiv für Daten With .DataRange .Interior.ColorIndex = 38 ' Rosa .Font.Italic = True ' Kursiv End With End With ' Zeilenfeld formatieren With .PivotFields("Getränk") ' Farbe und fett für Feld With .LabelRange .Interior.ColorIndex = 4 .Font.Bold = True End With ' Grün ' Fett Auswertungstechniken anwenden ' Farbe und kursiv für Daten With .DataRange .Interior.ColorIndex = 35 ' Hellgrün .Font.Italic = True ' Kursiv End With End With ' Datenfeld formatieren With .PivotFields("Summe von Total") ' Farbe und fett für Feld With .LabelRange .Interior.ColorIndex = 6 ' Gelb 515 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2 Kapitel 17 Listing 17.10 Pivot-Tabellen programmieren Formatierte Pivot-Tabelle einfügen (Fortsetzung) .Font.Bold = True End With ' Fett ' Farbe und kursiv für Daten With .DataRange .Interior.ColorIndex = 36 ' Hellgelb .Font.Italic = True ' Kursiv End With End With End With ' Spaltenbreite automatisch anpassen Columns("A:N").AutoFit Set ptCache = Nothing Set ptTable = Nothing End Sub Das obige Beispiel befindet sich auf der CD-ROM zum Buch im Ordner \Buch\Kap17. Die Mappe nennt sich Bsp17_08.xlsm. Die Prozedur ist im Modul mdl_01_PTFormatted untergebracht. 516 Microsoft Office Excel 2007-Programmierung, © 2008 Microsoft Press Deutschland, ISBN 978-3-86645-413-2