Notifications
Clear all

Tabela Dinâmica em VBA

5 Posts
2 Usuários
0 Reactions
1,271 Visualizações
(@ericks)
Posts: 17
Active Member
Topic starter
 

Olá, estou com um problema na criação das tabelas dinâmicas, pois toda vez que a macro é executada, a base de dados está com um tamanho diferente, então preciso criar uma nova tabela dinâmica a cada execução. O meu problema é deixar o range de seleção variável, se é que tem como fazer.
Segue a macro gravada, mas mesmo com os comandos selection.end na hora de criar a tabela ele fixa o range: ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"BASE EM APROVAÇÃO!R1C1:R274C35", Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:="Plan1!R3C1", TableName:= _
"Tabela dinâmica5", DefaultVersion:=xlPivotTableVersion14

Eu quero deixar a parte "BASE EM APROVAÇÃO!R1C1:R274C35" com range variável, como por exemplo : "BASE EM APROVAÇÃO!R1C1:R[variável]C35"

Tem como?

Sub dinamicaaprovacao()
'
' Tabela Dinâmica da Base em Aprovação

'
Sheets("BASE EM APROVAÇÃO").Select
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"BASE EM APROVAÇÃO!R1C1:R274C35", Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:="Plan1!R3C1", TableName:= _
"Tabela dinâmica5", DefaultVersion:=xlPivotTableVersion14
Sheets("Plan1").Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("Tabela dinâmica5").PivotFields("CATEGORIA PAI")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tabela dinâmica5").PivotFields("Tipo de venda")
.Orientation = xlColumnField
.Position = 1
End With
ActiveSheet.PivotTables("Tabela dinâmica5").AddDataField ActiveSheet. _
PivotTables("Tabela dinâmica5").PivotFields("Valor Absoluto"), _
"Soma de Valor Absoluto", xlSum
With ActiveSheet.PivotTables("Tabela dinâmica5").PivotFields( _
"Soma de Valor Absoluto")
.NumberFormat = "R$ #.##0,00"
End With
Sheets("Plan1").Select
Sheets("Plan1").Name = "Dinâmica em Aprovação"
Sheets("Dinâmica em Aprovação").Select
With ActiveWorkbook.Sheets("Dinâmica em Aprovação").Tab
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.399975585192419
End With
End Sub

 
Postado : 06/06/2014 11:33 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Use um intervalo dinâmico, coloque o nome do intervalo em:
De......

BASE EM APROVAÇÃO!R1C1:R274C35

Para.....

BASE EM APROVAÇÃO!MeuIntervaloDinamico

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 06/06/2014 12:50 pm
(@ericks)
Posts: 17
Active Member
Topic starter
 

Mas tem alguma sintaxe específica? eu tentei

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"BASE GERAL (aprovados)!intervalo_basegeral", Version:=xlPivotTableVersion14).
CreatePivotTable TableDestination:="Plan1!R3C1", TableName:= _
"Tabela dinâmica5", DefaultVersion:=xlPivotTableVersion14

"BASE GERAL (aprovados)!intervalo_basegeral", mas ele aponta erro de sintaxe.

 
Postado : 10/06/2014 9:26 am
(@ericks)
Posts: 17
Active Member
Topic starter
 

Usei sua ideia de intervalo dinâmico, mas fora do vba. Criei um intervalo na base de dados e criei a tabela dinâmica com base nele. Conforme a base de dados cresce a tabela dinâmica é atualizada.

Obrigado

 
Postado : 10/06/2014 11:28 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Que bom que resolveu, obrigado pelo retorno!!

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 10/06/2014 11:58 am