Hola a todos:
Mi pregunta es sobre tablas dinamicas, especificamente la programacion
de ellas con vba. El tema es que el orden de los elementos de la coleccion
columnitems y rowitems miembros de pivotcell (que a su vez es miembro de
range), no es el mismo que el orden de las colecciones columnfields y
rowfields del objeto pivottable.
Bueno el problema especifico es el siguiente: "crear un codigo que sea
capaz de identificar los criterios (los elementos de columna, fila y pagina)
de la celda activa y filtre el rango base de la tabla dinamica de acuerdo a
esos criterios... similar a lo que ocurre cuando esta seleccionada una celda
en una tabla dinamica y se le da doble clic (mostrar detalles) ahi se crea
una nueva hoja que nuestra los registros que constituyen el detalle de celda
actual, pero destaco mi idea ES FILTRAR la lista original, no obtener una
"copia" como lo hace el comando que detalle a anteriormente.
Para realizar lo anterior cree el siguiente codigo, pero como dije en un
principio el orden de las colecciones no es el mismo. es decir, cuando el
usuario reordena los campos de filas o columnas, la coleccion columnitems y
rowitems se "ordena", pero las colecciones columnfields y rowfields se
mantienen tal cual (en el orden en que fueron agregados los campos)... en
definitiva aqui esta parte del codigo usado:
Dim rng As Range
origen = ActiveCell.PivotTable.SourceData
p = InStr(1, origen, "!")
hoja = Left(origen, p - 1)
Rango = Mid(origen, p + 1)
Rango = Replace(Rango, "F", "R")
w = Application.ConvertFormula(Rango, xlR1C1, xlA1, True)
Set rng = Range(hoja & "!" & w)
If rng.Worksheet.FilterMode Then rng.Worksheet.ShowAllData
For C = 1 To ActiveCell.PivotCell.ColumnItems.Count
cmpo = ActiveCell.PivotTable.ColumnFields(C)
cmpov = ActiveCell.PivotCell.ColumnItems(C)
rng.AutoFilter Application.Match(cmpo, rng.Rows(1), 0), cmpov
Next C
For R = 1 To ActiveCell.PivotCell.RowItems.Count
cmpo = ActiveCell.PivotTable.RowFields(R)
cmpov = ActiveCell.PivotCell.RowItems(R)
rng.AutoFilter Application.Match(cmpo, rng.Rows(1), 0), cmpov
Next R
rng.Worksheet.Activate
bueno como veran si lo pares de datos no corresponden la lista filtrada
arroja cero registros, pues estoy filtrando un campo con el valor de otro...
Si alguien tiene alguna idea de como hacer esto se lo agrazco desde ya
Saludos, CRISTIAN
Leer las respuestas