Cómo actualizar varias tablas dinámicas por medio de macro y quitar los mismos campos?

Tengo un archivo que contiene 3 tablas dinámicas que contienen la misma información, pero necesito diferentes datos de las mismas, quiero hacer un botón que me permita actualizarlas y que a su vez me quite unos datos que no necesito, grabe una macro, pero no se como replicarlo para las otras hojas donde están las otras tablas dinámicas.

Ejemplo:

Sub Macro2()
' Macro2 Macro
' mciapy-trafos-vacias

ActiveSheet.PivotTables("TablaDinámica1").PivotFields("Unidad de Negocios"). _
CurrentPage = "(All)"
With ActiveSheet.PivotTables("TablaDinámica1").PivotFields("Unidad de Negocios" _
)
.PivotItems("30MCIAPY").Visible = False
.PivotItems("31MCIAPY").Visible = False
.PivotItems("32MCIAPY").Visible = False
.PivotItems("33MCIAPY").Visible = False
.PivotItems("33TRAFOS").Visible = False
.PivotItems("41MCIAPY").Visible = False
.PivotItems("51MCIAPY").Visible = False
.PivotItems("(blank)").Visible = False
End With
ActiveSheet.PivotTables("TablaDinámica1").PivotFields("Descripción"). _
CurrentPage = "(All)"
With ActiveSheet.PivotTables("TablaDinámica1").PivotFields("Descripción")
.PivotItems("Ajuste costo amortizado").Visible = False
.PivotItems("Amort.ant. Plantas, ductos y t").Visible = False
.PivotItems("Ant redes,líneas,cables").Visible = False
.PivotItems("Ant. Plantas, ductos y túneles").Visible = False
.PivotItems("OCI Reclas i% Cob FC").Visible = False
.PivotItems("ORI Reclas i% Cob FC").Visible = False
End With
End Sub

1 respuesta

Respuesta

[Hola

¿Tus tres tablas dinámicas están en una misma hoja, una en cada hoja, otra forma? Los campos en cuestión ¿son exactamente los mismos en las tres tablas dinámicas?

Abraham Valencia

Hola.

Las tres tablas están en hojas distintas, contienen la misma información, pero para analizar se seleccionan diferentes campos, pero de las tres tablas debo ocultar siempre la misma información.

Una captura de las 3 tablas dinámicas

Intenta así:

Sub ActualizarTD()
Dim TD As PivotTable
For Each TD In ActiveSheet.PivotTables
    With TD
        .
        .
        .
    End With
Next TD
End Sub

En donde dejé los puntos, van los campos con nombres comunes que quieres ocultar.  Obvio yo he colocado tres pero usa los necesarios.

Abraham Valencia

Buenos días, hice lo que me sugeriste y me sale el error que se ve en la imagen:

Perdón, fue un lapsus, usa esto:

Dim Hoja As Worksheet
Dim TD As PivotTable
For Each Hoja In Worksheets
    For Each TD In Hoja.PivotTables
        TD.PivotItems("41MCIAPY").Visible = False
        TD.
        TD.
    Next TD
Next Hoja

Saludos]

Abraham Valencia

Buenas tardes Abraham, de igual me sigue saliendo el mismo mensaje de depuración. Adjunto la imagen con el mensaje:

Andres.

Saludos

¿Existen esos campos en TODAS las tablas dinámicas? Ojo, en todas. Basta que uno solo no exista para que dé error.

Abraham Valencia

Ah ya entiendo, tengo una tabla más en el libro, que no tiene nada que ver con estas 3, efectivamente eso es, como puedo poner una excepción a esa tabla, para que me ejecute bien la solución que me planteas?

Prueba así:

Dim Hoja As Worksheet
Dim TD As PivotTable
For Each Hoja In Worksheets
    For Each TD In Hoja.PivotTables
        If TD.Name <> "Nombredeesatabladiferente" Then
            TD.PivotItems("41MCIAPY").Visible = False
            TD.
            TD.
        End If
    Next TD
Next Hoja

Comentas

Abraham Valencia

Buenos días, me sigue saliendo el mismo error, incluso deje solo las tablas dinámicas que necesito en un mismo libro, sin tablas diferentes, cada una en su respectiva hoja la nombre "TablaDinámica1" pero sigue saliendo lo mismo.

Coloca tu archivo en algún "Drive" (Google Drive, DropBox, OneDrive, etc.) y comparte por aquí el enlace.

Abraham Valencia

PD: Si hay información que consideres privada, solo bórrala.

Buenas tardes, claro que si.

https://drive.google.com/open?id=1Eb-Cr0809CafadH5kTo7JKln7kQRlolm 

Andrés L.

En general en todas las tablas los campos no coinciden así como tampoco los valores, por eso el error. Intenta, igual, con un "On Error Resume Next" al inicio de todo, no es lo mejor pero prueba y quizá te sea útil.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas