Accélérer tableau croisé dynamique filtrage du code VBA
J'ai un tableau croisé dynamique avec un champ de tableau croisé dynamique et contiennent de nombreux éléments.
J'ai le code VBA logique pour décider si le pivot de la valeur doit être visible ou non.
Le problème est excel recalcule tableau croisé dynamique pour chaque champ d'afficher ou de masquer ce qui le rend très lente.
Je voudrais quelque chose où il recalcule une seule fois, après toutes les valeurs sont définies.
J'ai essayé d'utiliser l'Application.Calculation = xlCalculationManual mais cela n'a pas aide.
code vba que j'utilise est quelque chose comme cela
For i = 1 To oPivotField.PivotItems.Count
If (oPivotField.PivotItems(i).Name = "TestCondition") Then
oPivotField.PivotItems(i).Visible = True 'Recalulates pivot table
Else
oPivotField.PivotItems(i).Visible = False 'Recalulates pivot table
End If
Next
Je suis à le faire manuellement, en décochez la case "afficher tous" de la boîte et vérifiez de nouveau les champs que je veux visible. Cette cause Excel pour recalculer une fois et ne montrer que le pivot des éléments que je veux visible.
Je voudrais faire la même chose via un code VBA.
J'ai même essayé d'utiliser
Application.ScreenUpdating = False
Application.DisplayAlerts = False
mais n'a pas fonctionné.
OriginalL'auteur Ankit | 2009-04-18
Vous devez vous connecter pour publier un commentaire.
Oh! Je viens de résoudre celui-ci:
Au début de votre code, désactiver la fonction d'auto-mise à jour comme ceci:
Et puis à la fin du code, la retourner sur le dos:
J'ai trouvé ce fil à la recherche pour aider à écrire du code qui détermine si un tableau croisé dynamique de la valeur doit être visible. Ce qui est derrière votre oPivotField? C'est la partie qui me manque!
OriginalL'auteur Michelle
PivotTable
les objets ont uneManualUpdate
propriété qui pourrait être ce que vous cherchez.Voir http://www.ozgrid.com/VBA/hide-pivot-fields.htm pour certains liés code
OriginalL'auteur barrowc
Essayez d'ajouter le suivant. Contribué à donner plus de vitesse dans mon cas aswell.
Au début:
À la fin:
OriginalL'auteur sabrekillah
de tableau croisé dynamique.ManualUpdate [ = ]
Les vraies causes RefreshTable pour effacer les données de tableau croisé dynamique, plutôt que d'actualiser il
Faux permet RefreshTable à fonctionner normalement.
Valeur par défaut est False.
Cette propriété est remis à Faux automatiquement après la procédure d'appel se termine (important)
Cette propriété doit être définie sur true juste avant de faire une mise à jour (par exemple, changement de pivotement de l'élément de propriété Visible)
Si votre code devrait ressembler à:
En conclusion, ManualUpdate changement de propriété n'est pas rester longtemps (dans mes tests, j'ai pu voir que il est remis à faux, dès que possible, c'est pourquoi j'ai recommandé de l'activer à chaque fois que vous voulez faire un changement pour un pivot point)
Pour plus d'info sur ce que signifie une mise à jour dans Excel, vous pouvez vérifier les points suivants:
Actualiser le tableau croisé dynamique vs mise à Jour – est-il une réelle différence?
Références:
Titre: Programmation Excel avec VBA et .NET
Par: Jeff Webb, Steve Saunders
Imprimer ISBN: 978-0-596-00766-9 | ISBN 10: 0-596-00766-3
Ebook ISBN: 978-0-596-15951-1 | ISBN 10: 0-596-15951-X
OriginalL'auteur Michael
Enregistrer une copie de votre classeur et l'enregistrer en tant que "excel 93-2007 de fichier". Alors tentez votre code. Espérons que cela vous aide.
OriginalL'auteur MAF