
Eu tenho um código VBA que executa uma consulta SQL, despeja-a em uma planilha do Excel 2010 e atualiza as 2 tabelas dinâmicas com base nos dados. Também tenho 2 gráficos dinâmicos baseados nas tabelas dinâmicas e, sempre que as tabelas são atualizadas, a formatação dos gráficos é perdida.
Eu segui as instruções emSeção 12.3 deste livroque sugeriu criar um tipo de gráfico personalizado com base em minhas preferências de formatação e aplicá-lo aos gráficos que desejo que permaneçam formatados dessa forma. Estas instruções funcionam muito bemseEu modifico manualmente os dados e atualizo manualmente a Tabela Dinâmica - os gráficos permanecem formatados corretamente. No entanto, quando executo este código:
For Each pt In NewSheet.PivotTables
pt.RefreshTable
Next
a formatação é imediatamente perdida.
Esta é a aparência dos dados antes:
e meus gráficos de pizza cuidadosamente elaborados:
Assim que eu atualizar os dados e atualizar as tabelas:
Isto é o que eu recebo:
Novamente, aplicar o estilo de gráfico personalizado manterá a formatação se for feito manualmente, mas a execução do código VBA de alguma forma redefine o tipo de gráfico personalizado.
Responder1
Para fazer isso sem o uso de gráficos dinâmicos, tudo o que você precisa é de um intervalo nomeado dinâmico e de um gráfico simples (se formatado de maneira grosseira).
1) Crie um nome definido usando esta fórmula: Series_A=OFFSET(Sheet!B1,0,0,COUNT(A:A),1)
, onde - Sheet1!B1 refere-se à sua primeira célula de contagem em sua tabela dinâmica (ou qualquer outra referência, se você estiver confortável com OFFSET) - Count(A:A) é sua coluna com linha rótulos
2) Crie seu(s) gráfico(s) com series=Series_A (e quaisquer outros que você precisar).
À medida que você atualiza suas tabelas dinâmicas, os nomes definidos farão referência aos valores de expansão/contração na coluna de rótulos de linha e retornarão apenas os valores na coluna de contagem. Não são necessários 0's, #N/A's ou colunas auxiliares.