Dans Excel 2003, j'obtiens une erreur d'exécution 1004: "erreur définie par l'application ou définie par l'application" sur la dernière ligne de ce code (commandtext = abc)Excel VBA: "erreur définie par l'application ou définie par l'application"
Sub SCommandTxt()
Dim abc as string
abc = Sheets("Totals").PivotTables("PivotTable2").PivotCache.CommandText
Sheets("Totals").PivotTables("PivotTable2").PivotCache.CommandText = abc
End Sub
ce n'est pas vraiment ce que je suis en train de faire, mais ne sachant pas ce qui est à l'origine d'une erreur dans quelque chose d'aussi simple que cela me rend un mur. La table Pivot à portée de main est une connexion ODBC. Le code suivant a été exécuté avant ce code et fonctionne correctement. Tout ce que je veux vraiment faire est de changer la requête dynamiquement en fonction de la plage de changement "WhereFilters". La requête ci-dessous fonctionne bien, mais je préfère ne pas avoir à afficher et à sélectionner la feuille et à passer par l'interface pivot si je peux juste changer le commandText directement (bien que basé sur les erreurs que je reçois peut-être pas ... Bien d'autres semblent penser ce qui précède est possible, donc je ne sais pas pourquoi il ne fonctionne pas pour moi):
Sub UpdatePvt()
Dim DBDir As String, DBName As String, SortType As String, Size As String
Dim QueryArry1(0 To 100) As String, rng As Range, x As Integer
DBDir = "C:\Documents and Settings\jt\"
DBName = "DatabaseExample.mdb"
If Range("ComboResult1") = 1 Then
SortType = "TDollars"
Sheets("Totals").PivotTables("PivotTable1").PivotFields("DIV_ID").AutoSort _
xlDescending, "Sum of Dollars"
Sheets("Totals").PivotTables("PivotTable2").PivotFields("DIV_ID").AutoSort _
xlDescending, "Sum of Dollars"
Else
SortType = "TCounts"
Sheets("Totals").PivotTables("PivotTable1").PivotFields("DIV_ID").AutoSort _
xlDescending, "Sum of Counts"
Sheets("Totals").PivotTables("PivotTable2").PivotFields("DIV_ID").AutoSort _
xlDescending, "Sum of Counts"
End If
If Range("ComboResult2") = 1 Then
Size = "Total"
ElseIf Range("ComboParOUT") = 2 Then
Size = "Small"
Else
Size = "Large"
End If
QueryArry1(0) = "SELECT Top 500 C.* "
QueryArry1(1) = "FROM Final03 C "
x = 2
If Not (Range("NoFilters")) Then
QueryArry1(x) = "INNER JOIN (Select DIV_ID FROM FullLookup WHERE "
x = x + 1
For Each rng In Range("WhereFilters")
QueryArry1(x) = rng.Value
x = x + 1
Next rng
QueryArry1(x) = "GROUP BY DIV_ID) E ON C.DIV_ID = E.DIV_ID "
x = x + 1
End If
QueryArry1(x) = "WHERE C.EntitySize = '" & Size & "' "
QueryArry1(x + 1) = "ORDER BY C." & SortType & " DESC "
'Example Query Results:
'SELECT Top 500 C.* FROM Final03 C INNER JOIN (Select DIV_ID FROM FullLookup WHERE Year = 2008 and State = 'MN' and Type = 'RST44' GROUP BY DIV_ID) E ON C.DIV_ID = E.DIV_ID WHERE C.EntitySize = 'Large' ORDER BY C.TCounts DESC
Sheets("Totals").Visible = xlSheetVisible
Sheets("Totals").Select
Sheets("Totals").PivotTables("PivotTable1").DataBodyRange.Select
Sheets("Totals").PivotTableWizard SourceType:=xlExternal, _
SourceData:=QueryArry1, _
Connection:=Array(_
Array("ODBC;DSN=MS Access Database;DBQ=" & DBDir & "\" & DBName & ";"), _
Array("DefaultDir=" & DBDir & ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;") _
)
Sheets("Totals").PivotTables("PivotTable2").DataBodyRange.Select
Sheets("Totals").PivotTableWizard _
SourceType:=xlPivotTable, _
SourceData:="PivotTable1"
Sheets("Totals").Visible = xlSheetHidden
End Sub
Merci
Pouvez-vous commenter sur ce que la solution s'est avérée être? –
La solution est le code long au bas de mon message avec des feuilles de défilement et de sélectionner des pivottables ... J'espérais le faire directement avec le Pivotcache, mais je n'ai toujours pas trouvé de solution. Votre réponse était un excellent candidat et ce que je pensais se passer au début, mais n'a pas résolu mon problème. Merci d'avoir pris le temps d'essayer de répondre à ma question. – Dan
De rien ... mais vous ne devriez pas marquer ma réponse comme acceptée si cela ne résout pas le problème. Il est préférable d'afficher votre propre réponse et de la marquer comme acceptée. Personne n'a de points de rep, mais cela peut aider les personnes qui font des recherches sur un problème similaire. –