2009-06-24 5 views
2

Ich habe eine Reihe von Pivot-Tabellen/Diagramme automatisch aus VBA-Code mit benutzerdefinierten Formatierungen erstellt.(Excel 2002) Formatierung verloren auf Pivot Chart Update

Wenn ich die Auswahl der Daten, die angezeigt werden sollen, aus der Dropdown-Liste im Diagramm ändert, wird die benutzerdefinierte Formatierung wieder auf die Standardanzeige des Diagrammtyps zurückgesetzt. Die zugrunde liegenden Diagrammdaten werden nicht geändert, sondern nur, was auf dem Diagramm angezeigt wird. Was muss ich tun, um diese benutzerdefinierte Formatierung beizubehalten, wenn ich die Pivot-Elementauswahl in einem Zeilenfeld ändere?

Edit 1: Die zugrunde liegenden Daten für die Pivot-Tabelle ändert sich nicht. Jedes Mal, wenn ich einen Filter für ein Zeilen-, Spalten- oder Seitenfeld ändere, verliert das aktualisierte Pivot-Diagramm jedoch das ursprüngliche, vom VBA-Code festgelegte Format.

Edit 2: Dies bezieht sich nur auf Excel-Versionen älter als Excel 2007

+0

Könnten Sie die xls-Datei irgendwo oder in ein Probe davon das Problem in Aktion zu sehen? – shahkalpesh

+0

Kurz überlegt - erstellen Sie das Diagramm jedes Mal neu im Makro? – shahkalpesh

+0

Beispiel xls-Datei hier: http://www.scribd.com/share/upload/13087523/20qu55pbhw9wllhuy3xk Beachten Sie, dass wenn Sie es in Excel 2007 betrachten, funktioniert es gut. Nur nicht in älteren Versionen von Excel – TheObserver

Antwort

1

, wie es klingt für mich ist, dass die VBA-Code die Pivot-Tabelle/Grafik erzeugt und dann nachher Sie versuchen, es zu zwicken. Wenn Sie die Pivot-Tabelle/das Pivot-Diagramm aktualisieren, geht Ihre benutzerdefinierte Formatierung leider mit VBA verloren. Excel erstellt grundsätzlich auch jedes Mal ein neues.

Wenn Sie die Formatierung von Hand in Excel vorgenommen haben, denke ich, dass Excel dies beibehält und Ihre Formatierung beim Ändern der Daten beibehalten wird. Das Beispiel, an das ich denken kann, ist, wenn Sie versehentlich ein Blatt löschen, das Sie rückgängig machen. Wenn Sie jedoch ein Blatt in VBA löschen, gibt es keine Möglichkeit zum Rückgängigmachen.

Ich würde dies als eine Lösung versuchen.

Erstellen Sie zwei Prozeduren: eine, die eine PivotTable von Grund auf neu erstellt, wenn die Daten angegeben werden, und die andere, die eine Pivot-Tabelle formatiert, wenn der Bereich einer Pivot-Tabelle angegeben wird. Der Code könnte so etwas wie diese

Sub GeneratePivotTable(rng as Range, var1 as Variant, var2 as Variant) 
    ' Code here that makes your Pivot Table 
    ' pass whatever you need to get the job done 
End Sub 

Sub FormatPivotTable(rng as Range, var1 as Variant, var2 as Variant) 
    ' Code here to format pivot table given range and other information 
    ' You might even be able to just directly pass a PivotTable object :D 
End Sub 

Dann schauen Sie alles, was Sie haben würden als nächstes zu tun, um es wie Ihr aktueller Code funktionsfähig zu machen ist eine Wrapper-Funktion erstellen, die beide nur aufruft.

Sub GenerateAndFormatPivotTable(rng as Range, var1 as Variant, var2 as Variant) 
    Call GeneratePivotTable(rng, var1, var2) 
    ' Maybe some processing here to set up the next call 
    Call FormatPivotTable(rng, var1, var2) 
End Sub 

Wenn Sie die Pivot-Tabelle als ein Objekt zu übergeben wollte, dass du ordentlich etwas tun könnte, wie ....

Function GeneratePivotTable(variables as Variant) as PivotTable 
    ' Generate your pivot table and return it 
    GeneratePivotTable = myPivotTableThatIMade 
End Function 

Sub FormatPivotTable(aPivotTableThatYouMake as PivotTable) 
    ' Code that formats your PivotTable 
End Sub 

Sub GenerateAndFormatPivotTable(rng as Range, var1 as Variant, var2 as Variant 
    Call FormatPivotTable(GeneratePivotTable(variables as Variant) 
End Sub 

Sie das alles so, wenn Sie einen Tisch zu machen, dann ist es zwicken müssen können Sie diese FormatPivotTable verwenden, um die aktualisierte Tabelle zu formatieren.

Für zusätzlichen Wahnsinn, haben das Blatt, das das Pivottable Feuer ist es Worksheet.Change oder Worksheet.Activate Ereignis für eine Pivot-Tabelle und rufen Sie Ihre Formatierungsfunktion zu suchen hat: D