TABLA DINÁMICA

07/04/2006 - 20:36 por fredy | Informe spam
Hola a todos, resulta que tengo unas tablas dinámicas agrupadas por mes y
dia en una hoja de Excel que pueden coger diferentes rangos de otra hoja de
excel que se encuentra en
otro libro.
He programado que se actualice el rango de las pivottable mediante vba
(metodo PivotTableWizard) pero resulta que el campo agrupado 'fecha' me lo
desordena.
He intentado hacerlo de todas las maneras posibles pero no hay manera.
Alguien se ha encontrado con lo mismo problema?, es un fallo del Excel?
Hago servir la siguiente funcion, la 'hojaOrig' es donde estan las tablas
dinamicas
y 'HojaDesti' es una hoja exterior desde donde capturo el rango q alimenta
las T.Dinámicas:

Public Sub Refrescar(hojaOrig As Worksheet, HojaDesti As Worksheet)

Dim i As Integer
Dim pt As PivotTable
Dim r As Range
Dim Fila As Long
Dim colFin As Integer

i = 1
Do While HojaDesti.Cells(1, i) <> ""
i = i + 1
Loop
colFin = i - 1

i = 1
Do While HojaDesti.Cells(i, 1) <> ""
i = i + 1
Loop
Fila = i - 1
DoEvents
If Fila < 2 Then Exit Sub

hojaOrig.PivotTableWizard SourceType:=xlDatabase,
SourceData:=HojaDesti.Range(HojaDesti.Cells(1, 1), HojaDesti.Cells(Fila,
colFin))
For i = 1 To hojaOrig.PivotTables.Count
Set pt = hojaOrig.PivotTables(i)
pt.RefreshTable
Next
End Sub

Cualquier ayuda se lo agradeceré.
 

Leer las respuestas

#1 Héctor Miguel
09/04/2006 - 01:19 | Informe spam
hola, fredy !

... tablas dinamicas agrupadas por mes y dia... que pueden coger diferentes rangos de otra hoja... en otro libro.
He programado que se actualice el rango de las pivottable mediante vba (metodo PivotTableWizard)
pero resulta que el campo agrupado 'fecha' me lo desordena.
He intentado hacerlo de todas las maneras posibles pero no hay manera.
Alguien se ha encontrado con lo mismo problema?, es un fallo del Excel?
Hago servir la siguiente funcion, la 'hojaOrig' es donde estan las tablas dinamicas
y 'HojaDesti' es una hoja exterior desde donde capturo el rango q alimenta las T.Dinamicas:



1) supongo que al ['regresar' y] usar al asistente de tablas dinamicas para 'actualizar' el rango 'de origen'...
[aunque tu le nombras a la hoja 'hojaDesti']...
-> ES [como] 'empezar desde ceros' con la 'creacion' [mas que 'actualizacion'] de una tabla dinamica
[aunque estas 'aprovechando' una tabla ya creada] -?-

2) del codigo que expones [creo que] podrias ahorrarte los dos bucles 'do while...next' para 'detectar' el rango actual del origen...
si lo unico que necesita es obtener cuales son las filas y columnas NO-vacias partiendo de la celda 'A1' de 'hojaDesti'...
prueba a detectar [y usar] la 'region actual' a partir de dicha celda ['A1'] :)) [p.e.]
elimina [o no uses de momento] los do while...next y cambia la instruccion del asistente a algo +/- como lo siguiente...
-> hojaOrig.PivotTableWizard SourceType:=xlDatabase, SourceData:=HojaDesti.Range("a1").CurrentRegion

3) si lo que necesitas es actualizar un rango de origen que resulta ser un rango 'variable'...
prueba a definir/usar/vincular/... nombres dinamicos que hagan referencia a rangos variables [p.e.]
puedes consultar un ejemplo en la pagina de Debra Dalgleish en:
-> http://www.contextures.com/xlPivot01.html#Dynamic

supongo que habra algunos detalles que pudieran haberse quedado 'en el tintero' -?- asi que...
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ codigo 'original' en la exposicion __
Public Sub Refrescar(hojaOrig As Worksheet, HojaDesti As Worksheet)
Dim i As Integer
Dim pt As PivotTable
Dim r As Range
Dim Fila As Long
Dim colFin As Integer
i = 1
Do While HojaDesti.Cells(1, i) <> ""
i = i + 1
Loop
colFin = i - 1
i = 1
Do While HojaDesti.Cells(i, 1) <> ""
i = i + 1
Loop
Fila = i - 1
DoEvents
If Fila < 2 Then Exit Sub
hojaOrig.PivotTableWizard SourceType:=xlDatabase, SourceData:=HojaDesti.Range(HojaDesti.Cells(1, 1), HojaDesti.Cells(Fila, colFin))
For i = 1 To hojaOrig.PivotTables.Count
Set pt = hojaOrig.PivotTables(i)
pt.RefreshTable
Next
End Sub

Preguntas similares