J'essaie d'extraire les données source d'une pivottable qui utilise un cache pivottable et placez-le dans une feuille de calcul vierge. J'ai essayé ce qui suit mais cela renvoie une erreur définie par l'application ou définie par l'application. Documentation indique que pivotcache.recordset est un type ADO, donc cela devrait donc fonctionner. J'ai la bibliothèque ADO activée dans les références. P> Toute suggestion sur la manière de y parvenir? P> p>
3 Réponses :
Aller à la fenêtre immédiate et tapez
? Ceworkbook.pivotcaches (1) .Querytype P>
Si vous obtenez autre chose que 7 (xladorecordset), la propriété Recordset ne s'applique pas à ce type. de pivotcache et retournera cette erreur. p>
Si vous obtenez une erreur sur cette ligne, votre pivotcache n'est pas basé sur des données externes du tout. p>
Si vos données sources vient de ce travail (c.-à-d. Données Excel), alors vous pouvez utiliser P>
? Ceworkbook.pivotcaches (1) .Sourcedata P>
Pour créer un objet de plage et une boucle à travers elle. P>
Si votre QueryType est 1 (xlodbcquerie), alors SourceData contiendra la chaîne de connexion et le commandement de commandement à créer et de créer un enregistrement ADO, comme celui-ci: p> Vous avez besoin de la référence ADO, Mais vous avez dit que vous avez déjà cet ensemble. P> p>
Debug.Print Ceworkbook.PivotCaches (1) .Querytype jette une erreur. Pivotcaches (1) .Sourcedata renvoie le chemin d'accès au classeur externe sur lequel les données source ont été stockées. La table pivot a été créée à l'aide de données à partir d'un classeur externe (pivottable (1) .SaveData est vrai) qui a depuis été supprimé. Je souhaite recréer les données source d'origine du cache pivot. Lorsque vous dites "Créer un objet de gamme de SourceData et boucle à travers elle", je suppose que vous voulez dire une plage d'utilisation (SOURCEDATA) pour référencer l'objet de la plage spécifié par SourceData, mais qui n'est pas disponible pour moi. Merci de votre aide.
Si vous double-cliquez sur une cellule dans une table pivot ou cliquez avec le bouton droit de la souris et sélectionnez «Afficher les détails» Excel exporte les données source pour ce calcul sur une nouvelle feuille de calcul dans le même classeur. Vous ne pouvez faire que cette cellule à la fois. Je dois le faire pour toute la table de pivot, puis automatiser le processus.
Malheureusement, il semble y avoir aucun moyen de manipuler directement PivotCache dans Excel.
J'ai trouvé un travail autour. Le code suivant extrait le cache pivot de chaque table de pivotement trouvé dans un classeur, la place dans une nouvelle table de pivot et ne crée qu'un seul champ de pivotements (pour vous assurer que toutes les lignes du cache pivot sont incorporées au total), puis des incendies ShowDetail, qui crée une nouvelle feuille avec toutes les données de la table pivot. P>
J'aimerais toujours trouver un moyen de travailler directement avec Pivotcache, mais cela obtient le travail effectué. P>
Public Sub ExtractPivotTableData() Dim objActiveBook As Workbook Dim objSheet As Worksheet Dim objPivotTable As PivotTable Dim objTempSheet As Worksheet Dim objTempPivot As PivotTable If TypeName(Application.Selection) <> "Range" Then Beep Exit Sub ElseIf WorksheetFunction.CountA(Cells) = 0 Then Beep Exit Sub Else Set objActiveBook = ActiveWorkbook End If With Application .ScreenUpdating = False .DisplayAlerts = False End With For Each objSheet In objActiveBook.Sheets For Each objPivotTable In objSheet.PivotTables With objActiveBook.Sheets.Add(, objSheet) With objPivotTable.PivotCache.CreatePivotTable(.Range("A1")) .AddDataField .PivotFields(1) End With .Range("B2").ShowDetail = True objActiveBook.Sheets(.Index - 1).Name = "SOURCE DATA FOR SHEET " & objSheet.Index objActiveBook.Sheets(.Index - 1).Tab.Color = 255 .Delete End With Next Next With Application .ScreenUpdating = True .DisplayAlerts = True End With End Sub
C'est une excellente solution de contournement, merci de la publier. Je viens d'essayer cela dans Excel 2010 et pour une raison quelconque a eu une erreur sur la ligne .Showdetail. Cependant, je pourrais alors faire manuellement manuellement (via le menu contextuel d'interface utilisateur) sur la table pivot de pivot cellulaire, ce code généré et obtenir une nouvelle feuille créée de cette façon.
Sous Excel 2010 au moins, la ligne: ".Range (" B2 "). ShowDetail = True" devrait réellement être: ".Range (" A2 "). ShowDetail = vrai" (A2 plutôt que b2)
Je me suis retrouvé avoir le même problème, avoir besoin de gratter des données par programmation à provenir de différentes excelles avec des données pivotes en cache. Bien que le sujet soit un peu vieux, il n'ya toujours aucun moyen direct d'accéder aux données.
ci-dessous Vous pouvez trouver mon code, ce qui est un raffinement plus généralisé de la solution déjà affichée. P>
La différence majeure est la Je l'utilise pour gratter format de fichier différent sans avoir à les ouvrir, il me servant assez bien jusqu'à présent. p> espère que c'est utile. p> crédit à la feuille de calcul du filtreGuru.com (bien que je Ne vous souvenez pas à quel point est l'original et combien est le mien d'être honnête) p>
Quelle est la valeur au moment de l'exécution de
ceworkbook.pivotcaches (1) .Recordset code>?
C'est un jeu d'enregistrements avec recordcount = 49, mais si j'essaie de faire ce qui suit, je reçois aussi une erreur définie par l'application ou une erreur définie par l'application: DIM objrecordset comme adodb.recordset Set objrecordset = ceworkbook.pivotcaches (1) .Recordset
Mettez the thewworkbook.pivotcaches (1) .Recordset dans la fenêtre de la montre pour voir quel type est exact. Cela devrait aider.
Au moment de l'exécution, le type de variable est entier / variante. Bien sûr objrecordset est un enregistrement de type. Dès que l'application est exécutée à ce document.pivotcaches (1) .Recordset affiche une erreur définie par l'application ou définie par objet dans la fenêtre de surveillance. Me conduit à croire que peut-être que j'oublie une référence. Peut-être quelque chose de spécifique à PivotCache? Merci de votre aide.