AW: Pivotchart drucken
29.10.2014 11:03:39
fcs
Hallo Florian,
eine Automatismus als Funktion in Excel gibt es nicht.
Die Vorgabe des Kundennamens im Berichtsfeld oder als Filter für das Zeilenfeld und das Drucken muss man mit einem maßgeschneiderten Makro steuern.
Nachfolgend 2 Makrobeispiele. Das passend musst du im VBA-Editor in ein allgemeines Modul der Datei mit dem Pivotbericht/Diagramm kopieren oder in deine persönliche Makro-Arbeitsmappe.
Die Namen von Blättern (Tabellen, Diagramm) und Pivotfeld musst du ggf. anpassen.
Gruß
Franz
'Erstellt unter Excel 2010
'vor dem Starten des Makros den Ausgabedrucker wählen!!!
Sub KundenDiagramme_Drucken_Berichtsfeld()
'Das Feld Kunde ist im Pivotbericht als Berichtsfeld eingerichtet
Dim wksPivot As Worksheet
Dim objChart As Chart
Dim pvTab As PivotTable, pvField As PivotField, pvItem As PivotItem
Dim intItem As Integer
Set wksPivot = ActiveWorkbook.Worksheets("Auswertung") 'Tabellenblatt mit Pivotbericht
Set pvTab = wksPivot.PivotTables(1)
Set pvField = pvTab.PageFields("Kunde")
Set objChart = wksPivot.ChartObjects(1).Chart 'wenn Diagramm in Tabellenblatt eingebettet
' Set objChart = ActiveWorkbook.Charts("Diagramm") 'wenn Diagramm als separates Blatt angelegt
'Seitenname im Feld auf die einzelnen Kunden setzen und Diagramm drucken
For intItem = 1 To pvField.PivotItems.Count
Select Case pvField.PivotItems(intItem).Name
Case "(All)", "(Alle)"
'do nothing
Case Else
pvField.CurrentPage = pvField.PivotItems(intItem).Name
pvTab.RefreshTable 'evtl. nicht notwendig
objChart.PrintOut
' objChart.PrintPreview
End Select
If intItem = 3 Then Exit For 'Notausgang zum Testen - Zeile löschen wenn alles funktioniert
Next
End Sub
Sub KundenDiagramme_Drucken_Zeilenfeld()
'Das Feld Kunde ist im Pivotbericht als Zeilenfeld eingerichtet
Dim wksPivot As Worksheet
Dim objChart As Chart
Dim pvTab As PivotTable, pvField As PivotField, pvItem As PivotItem
Dim intItem As Integer, arrItems() As String
Set wksPivot = ActiveWorkbook.Worksheets("Auswertung") 'Tabellenblatt mit Pivotbericht
Set pvTab = wksPivot.PivotTables(1)
Set pvField = pvTab.RowFields("Kunde")
Set objChart = wksPivot.ChartObjects(1).Chart 'wenn Diagramm in Tabellenblatt eingebettet
' Set objChart = ActiveWorkbook.Charts("Diagramm") 'wenn Diagramm als separates Blatt angelegt
pvField.ClearAllFilters
ReDim arrItems(1 To pvField.PivotItems.Count)
'Alle Pivotitems in Array einlesen
For Each pvItem In pvField.PivotItems
If pvItem.Visible = True And pvItem.RecordCount > 0 Then
intItem = intItem + 1
ReDim Preserve arrItems(1 To intItem)
arrItems(intItem) = pvItem.Name
End If
Next
'Filter für Feld auf die einzelnen Kundennamen setzen und Diagramm drucken
For intItem = 1 To UBound(arrItems)
pvField.ClearAllFilters
Select Case arrItems(intItem)
Case "(All)", "(Alle)"
'do nothing
Case Else
pvField.PivotFilters.Add Type:=xlCaptionEquals, Value1:=arrItems(intItem)
pvTab.RefreshTable 'evtl. nicht notwendig
objChart.PrintOut
' objChart.PrintPreview
End Select
If intItem = 3 Then Exit For 'Notausgang zum Testen - Zeile löschen wenn alles funktioniert
Next
End Sub