MS Excel 2003: Parzialmente aggiornare PivotCache o combinare PivotCache

Ho un pivotcache di Excel collegato a una query di database di Access. Tuttavia, se cambio i dati di origine in Access (ad esempio, modifica un valore, aggiunge / elimina un record), devo aggiornare la pivotcache che a sua volta esegue la query per recuperare tutti i record dell'integer set di dati. Questo è molto inefficiente. Voglio solo recuperare record che cambiano frequentemente (idealmente, solo record che cambiano, ma che sarà una considerazione futura).

Ho provato le soluzioni qui sotto, ma non sono adatti al mio scopo:
* Creare due tabelle di query in Excel nello stesso foglio di lavoro e creare una tabella pivot sull'integer foglio di lavoro contenente le due tabelle di query. Ho solo aggiornato la tabella di query "corrente". Tuttavia, sono limitata a 65536 righe che è inferiore al numero record nella mia query.
* Creare due tabelle pivot. Tuttavia, questo è troppo impegno per l'utente che deve impostare due volte le tabelle pivot. Voglio che l'ottimizzazione accada dietro le quinte piuttosto che l'utente che deve cambiare le proprie abitudini.

La soluzione potenziale da considerare ora è aggiornare il pivot cache utilizzando due recordset ADO, uno per i dati storici e il secondo per i dati correnti che cambiano frequentemente. Se cambio i dati attuali, eseguo solo la query per il set di dati corrente.

Tuttavia, sembro avere difficoltà a convertire un pivotcache in un recordset ADO. La row "pvtRecordset.MoveFirst" genera un errore. È lì per scopi di prova. Se questa linea non funziona, non posso combinare un nuovo recordset con un pivotcache utilizzando la function rsCombineRecordsets.

L'altro modo è quello di convertire un recordset ADO in un pivotcache (cioè impostare pivotcache.recordset = ADOrecordset). Il recordset ADO sui dati storici viene salvato in memory, quindi abbiamo solo bisogno di aprire il recordset una sola volta. Tuttavia, non ho idea di come farlo funzionare. I dati della tabella pivot rimangono invariati in quanto mostrano ancora i risultati di "strSqlHist" piuttosto che la combinazione di "strSqlHist" e "strSqlCurr".

Sub Main() RefreshPivotCache "CURRENT" End Sub Public Function RefreshPivotCache(strRefreshCmd As String) Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim pvtCache As PivotCache Dim pvtRecordset As ADODB.Recordset Dim ptt As PivotTable Dim strSqlHist As String, strSqlCurr As String Dim strCon As String Dim rstCollection As New Collection strCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=I:\Cash Management\Cash_M.mdb;" strSqlHist = "SELECT * FROM v_CFMT WHERE Trx_Date < DateValue('01-DEC-2009')" strSqlCurr = "SELECT * FROM v_CFMT WHERE Trx_Date >= DateValue('01-DEC-2009')" If strRefreshCmd = "NEW" Then 'Open the connection and fill the Recordset. cnn.Open strCon Set rst = cnn.Execute(strSqlHist) 'Add pivot cache and assign the cache source to the recordset Set pvtCache = ThisWorkbook.PivotCaches.Add(SourceType:=xlExternal) Set pvtCache.Recordset = rst 'Create pivot table and assign to pivot cache Set ptt = pvtCache.CreatePivotTable(TableDestination:=ActiveCell, TableName:="PT_ADO") ElseIf strRefreshCmd = "CURRENT" Then 'Open the connection and fill the Recordset. cnn.Open strCon Set rst = cnn.Execute(strSqlCurr) 'Convert pivotcache to recordset - does not work Set pvtRecordset = ActiveCell.PivotTable.PivotCache.Recordset pvtRecordset.MoveFirst 'Operation is not allowed when the object is closed 'Combine the two recordsets and assign to the pivotcache recordset rstCollection.Add pvtRecordset rstCollection.Add rst Set pvtRecordset = rsCombineRecordsets(rstCollection) 'custom function. End If 'Release objects from memory cnn.Close Set cnn = Nothing If CBool(rst.State And adStateOpen) Then rst.Close Set rst = Nothing Set ptt = Nothing Set rstCollection = Nothing End Function 

In sintesi, come posso aggiornare parzialmente una pivot cache o combinare due pivotcaches?

Si sta tring per get un recordset scollegato quando dici "memorizzare un recordset in memory"? vedere come creare un recordset scollegato