2009-06-24 4 views
2

У меня есть набор сводных таблиц/диаграмм, автоматически созданных из кода VBA с пользовательским форматированием.(Excel 2002) Форматирование потеряно при обновлении сводной диаграммы

Когда я изменяю выбор данных, которые будут отображаться в выпадающем списке на диаграмме, настраиваемое форматирование возвращается к отображению по умолчанию типа диаграммы. Основные данные диаграммы не изменены, только то, что отображается на диаграмме. Что мне нужно сделать, чтобы сохранить это настраиваемое форматирование каждый раз, когда я изменяю выбор элемента в поле строки?

Редактировать 1: Исходные данные для сводной таблицы не изменяются. Однако каждый раз, когда я меняю фильтр на строке, столбце или странице, обновленная сводная диаграмма теряет исходный формат, заданный кодом VBA.

Edit 2: Это относится только к версиям Excel старше Excel 2007.

+0

Не могли бы вы поместить файл XLS где-то образец чтобы увидеть проблему в действии? – shahkalpesh

+0

Быстрая мысль - вы каждый раз создаете диаграмму в макросе? – shahkalpesh

+0

Пример файла xls здесь: http://www.scribd.com/share/upload/13087523/20qu55pbhw9wllhuy3xk Обратите внимание, что если вы посмотрите на него в Excel 2007, он отлично работает. Просто не в старых версиях Excel – TheObserver

ответ

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 для форматирования обновленной таблицы.

Для дополнительного безумии есть лист, который имеет огонь PivotTable это Worksheet.Change или Worksheet.Activate событие для поиска сводной таблицы и обратитесь к функции форматирования: D

Смежные вопросы