Что это походит на меня, что код 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
Не могли бы вы поместить файл XLS где-то образец чтобы увидеть проблему в действии? – shahkalpesh
Быстрая мысль - вы каждый раз создаете диаграмму в макросе? – shahkalpesh
Пример файла xls здесь: http://www.scribd.com/share/upload/13087523/20qu55pbhw9wllhuy3xk Обратите внимание, что если вы посмотрите на него в Excel 2007, он отлично работает. Просто не в старых версиях Excel – TheObserver