2009-06-24 69 views
2

我有一組數據透視表/圖表通過自定義格式從VBA代碼自動創建。(Excel 2002)格式丟失數據透視表更新

當我改變數據的選擇,從下拉列表中的圖表中顯示,自定義格式將變回圖表類型的默認顯示。底層圖表數據不會更改,只會顯示在圖表上。每次在行字段中更改數據透視表項選擇時,我必須做些什麼才能保留該自定義格式?

編輯1:數據透視表的底層數據不會改變。但是,每次我在行,列或頁面字段上更改篩選器時,更新後的透視圖都會丟失由VBA代碼設置的原始格式。

編輯2:這僅適用於Excel版本比Excel 2007中

+0

你能放的地方XLS文件或樣品它看到問題的行動? – shahkalpesh 2009-06-24 04:53:56

回答

1

年長這聽起來像我是VBA代碼生成的數據透視表/圖表,然後你想事後調整它。不幸的是,使用VBA時,當您更新數據透視表/圖表時,您的所有自定義格式都將丟失。 Excel基本上每次都創建一個新的。

如果您在Excel中手動進行格式設置,我認爲Excel會跟蹤該格式,並會在您更改數據時保留格式。我能想到的例子是,如果你不小心刪除了一個工作表,你可以撤銷它,但是如果你在VBA中刪除工作表,那麼沒有辦法撤銷。

我會試試這個解決方案。

創建兩個過程:一個給定的數據時從頭創建一個數據透視表,和給定的樞軸表的範圍時,用於格式化的樞軸表中的其他。該代碼可能是這個樣子

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 

然後你將不得不在下使它的功能就像你當前的代碼做的是創建一個包裝函數只是調用兩種。

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 

如果您想通過數據透視表作爲一個對象,你可以做一些像整齊....

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 

你做了這一切,所以如果你犯了一個表,則必須調整它,您可以使用FormatPivotTable格式化更新的表。

爲了更加瘋狂,擁有一個具有數據透視表火是Worksheet.Change或Worksheet.Activate事件來搜索數據透視表和調用你的格式化功能片:d