2009-06-24 19 views
2

VBAコードからカスタムフォーマットで自動的に作成された一連のピボットテーブル/グラフがあります。(Excel 2002)ピボットグラフ更新でフォーマットが失われる

グラフのドロップダウンリストから表示するデータの選択を変更すると、カスタムフォーマットがチャートタイプのデフォルト表示に戻ります。基礎となるチャートデータは変更されず、チャートに表示されるものだけが変更されます。行フィールドでピボット項目の選択を変更するたびに、そのカスタム書式を保持するにはどうすればよいですか?

編集1:ピボットテーブルの基になるデータは変更されません。ただし、行、列、またはページフィールドのフィルタを変更するたびに、更新されたピボットグラフはVBAコードで設定された元の形式を失います。

編集2:これはVBAコードは、ピボットテーブル/グラフを生成し、あなたが後でそれを微調整しようとしていることは何ですか、それは私にように聞こえるエクセル2007

+0

はどこかXLSファイルまたはサンプルを置いてもらえませんそれが実際の問題を見るのですか? – shahkalpesh

+0

すばやく考えて、毎回マクロでチャートを再作成していますか? – shahkalpesh

+0

xlsファイルの例:http://www.scribd.com/share/upload/13087523/20qu55pbhw9wllhuy3xk Excel 2007で見ると、正常に動作します。旧バージョンのExcelではなく – TheObserver

答えて

1

より古いExcelのバージョンに関係します。残念なことにVBAでは、ピボットテーブル/グラフを更新すると、すべてのカスタム書式が失われます。 Excelは基本的に毎回新しいものを作成しています。

Excelで手作業で書式を設定した場合、Excelはそれを追跡し、データを変更するときに書式設定を保持します。私が考えることができる例は、誤って元に戻したシートを削除した場合ですが、VBAでシートを削除した場合は元に戻すことはできません。

私はこれを解決策として試してみます。

2つのプロシージャを作成します.1つはデータが与えられたときにゼロからピボットテーブルを作成し、もう1つはピボットテーブルの範囲が与えられたときにピボットテーブルをフォーマットします。コードはこの

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

関連する問題