Filtrage des Problèmes avec Macro pour la Création de Tableau croisé dynamique dans Excel 2010 VBA
Je suis nouveau sur VBA et suis en train d'écrire une macro qui permet de créer un tableau croisé dynamique. J'ai besoin de filtrer les différents domaines et ont essayé d'utiliser PivotFilters.Ajouter et PivotItems pour ne laisser certaines choses dans...parfois ça marche, mais d'autres fois, il jette les erreurs. Le code suivant fonctionne très bien:
Sub CreatePivot()
Dim objTable As PivotTable, objField As PivotField
ActiveWorkbook.Sheets("CP Monthly Data").Select
Range("A1").Select
Set objTable = Sheet1.PivotTableWizard
objTable.Name = "Resource Requests"
objTable.InGridDropZones = True
objTable.RowAxisLayout xlTabularRow
Set objField = objTable.PivotFields("Company name")
objField.Orientation = xlRowField
objField.Position = 1
Set objField = objTable.PivotFields("Probability Status")
objField.Orientation = xlRowField
objField.Position = 2
objField.PivotItems("X - Lost - 0%").Visible = False
objField.PivotItems("X - On Hold - 0%").Visible = False
objField.AutoSort xlDescending, "Probability Status"
Set objField = objTable.PivotFields("Project")
objField.Orientation = xlRowField
objField.Position = 3
Set objField = objTable.PivotFields("Project manager")
objField.Orientation = xlRowField
objField.Position = 4
Set objField = objTable.PivotFields("Resource name")
objField.Orientation = xlRowField
objField.Position = 5
objField.AutoSort xlAscending, "Resource name"
Set objField = objTable.PivotFields("June, 2012")
objField.Orientation = xlDataField
objField.Function = xlSum
objField.NumberFormat = "##"
objField.Caption = "June"
Set objField = objTable.PivotFields("Workgroup Name")
objField.Orientation = xlPageField
objField.PivotItems("ATG").Visible = False
objField.PivotItems("India - ATG").Visible = False
objField.PivotItems("India - Managed Middleware").Visible = False
Application.DisplayAlerts = True
End Sub
Le "nom de la Ressource" le terrain me donne des problèmes. J'ai besoin d'afficher uniquement les noms des ressources qui commencent par "*TBD" et d'exclure ceux qui contiennent "ATG" dans le nom. Je l'ai essayé ce qui suit:
Set objField = objTable.PivotFields("Resource name")
objField.Orientation = xlRowField
objField.Position = 5
objField.PivotFilters.Add xlCaptionContains, Value1:="TBD"
objField.PivotFilters.Add xlCaptionDoesNotContain, Value1:="ATG"
objField.AutoSort xlAscending, "Resource name"
Qui renvoie "erreur d'Exécution '1004': définie par l'Application ou par l'objet défini erreur
Ce n'est pas exactement ce dont j'ai besoin car j'ai aussi besoin de filtrer ces sans "TBD" dans le nom, mais j'ai aussi essayé:
Set objField = objTable.PivotFields("Resource name")
objField.Orientation = xlRowField
objField.Position = 5
objField.PivotItems("*ATG*").Visible = False
objField.AutoSort xlAscending, "Resource name"
Qui renvoie "erreur d'Exécution '1004': Impossible d'obtenir le PivotItems propriété du Champ de classe
J'ai aussi essayé l'enregistrement d'une macro et de vérifier les résultats par rapport à mon code. Les résultats de l'utilisation PivotFilters.Ajouter que j'ai essayé. La principale différence entre la macro enregistrée et mon code est l'utilisation de PivotTableWizard et je commence à me demander si ce qui compte...je suis nouveau, vous vous souvenez?
Aucune idée sur comment résoudre ce problème? Je suis à l'aide d'Excel 2010 et ont passé des heures à la recherche de ce et rien, j'ai essayé a travaillé. Merci d'avance pour toute aide!!
Vous devez vous connecter pour publier un commentaire.
Unfortunatley, vous ne pouvez pas demander le même type de filtres à un champ dans une PT. Ce lien est un décent lire sur le sujet.
Pour résoudre votre problème, vous pouvez remplacer ce bloc de code dans votre post ci-dessus:
Avec le code ci-dessous:
Dim objTable As PivotTable, objField As PivotField ActiveWorkbook.Sheets("CP Monthly Data").Select Range("A1").Select Set objTable = Sheet1.PivotTableWizard objTable.Name = "Resource Requests" objTable.InGridDropZones = True objTable.RowAxisLayout xlTabularRow objTable.AllowMultipleFilters = True
objTable.AllowMultipleFilters = True
ligne des résultats dans "Run-time error '5': Invalid argument ou appel de procédure"