Excel VBA:更新Pivot Sourcedata

时间:2009-12-08 14:50:09

标签: database vba excel-vba pivot excel

我试图记录代码来更新一个pivot sourcedata,它给了我这个:

ActiveSheet.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;") _
    )

但这甚至不允许我指定我要更新的WHICH数据透视表......甚至可以执行我真正想做的事情,即更新pivotcache以便更新使用相同源的所有数据透视表。< / p>

那么更新sourcedata的好方法是什么?

谢谢

修改

但我甚至得到了“应用程序定义或对象定义的错误”错误,其中包含以下内容:

str = Sheets("Totals").PivotTables("PivotTable2").PivotCache.CommandText
Sheets("Totals").PivotTables("PivotTable2").PivotCache.CommandText = str

我仔细检查了我的数据透视表是否仍在点击实时数据并刷新它仍然可以工作......但我无法将命令字符串设置为当前的状态?太奇怪了。

由于

1 个答案:

答案 0 :(得分:5)

可以通过工作簿访问数据透视表。您可以使用以下子列表列出所有当前缓存:

Option Explicit

Private Sub listCaches()
    Dim selectedCache As PivotCache

    For Each selectedCache In ThisWorkbook.PivotCaches
        Debug.Print selectedCache.Index
        Debug.Print selectedCache.Connection
    Next selectedCache

End Sub

您可以使用以下方式访问要编辑的连接:

ThisWorkbook.PivotCaches(yourIndex).Connection

注意:更改连接后,您应该致电:

ThisWorkbook.PivotCaches(yourIndex).Refresh

编辑:您可以更改CommandText,而不是更改SourceData。这应该具有相同的效果。以下代码对我有用:

ThisWorkbook.PivotCaches(1).CommandText = "SELECT movies.title, movies.rating, movies.comments FROM `C:\Folder\moviesDB`.movies movies"
ThisWorkbook.PivotCaches(1).Refresh

此代码还更新了我的SourceData。

编辑2:更改CommandText throgh数据透视表:

Sheets("mySheet").PivotTables("PivotTable1").PivotCache.CommandText = "SELECT movies.title as meh, movies.rating, movies.comments FROM `C:\Folder\moviesDB`.movies movies"
Sheets("mySheet").PivotTables("PivotTable1").PivotCache.Refresh

注意:moviesDB是.mdb文件,电影是表/查询

注意2:在更改之前,它还可能帮助您Debug.Print工作CommandText。这应该为您提供新CommandText的模板。