【问题标题】:Excel VBA: Update Pivot SourcedataExcel VBA:更新数据透视源数据
【发布时间】:2009-12-08 14:50:08
【问题描述】:

我试图记录代码来更新给我这个的数据透视源数据:

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

但这甚至不允许我指定我要更新的数据透视表...甚至做我真正想做的事,即更新数据透视缓存,以便更新使用相同源的所有数据透视表。

那么更新源数据的好方法是什么?

谢谢

编辑:

但我什至得到“应用程序定义或对象定义的错误”错误,简单如下:

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

我确实仔细检查了我的数据透视表是否仍在访问实时数据并且刷新它仍然有效...但是我无法将命令字符串设置为当前的值?好诡异。

谢谢

【问题讨论】:

    标签: database vba excel pivot


    【解决方案1】:

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

    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。

    Edit2:通过数据透视表更改 CommandText:

    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 文件,movies 是表/查询

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

    【讨论】:

    • 连接很好,我正在尝试更改 SourceData...但是当我尝试“ThisWorkbook.PivotCaches(2).SourceData”时出现“应用程序定义或对象定义错误” = QueryArry1"... 我开始认为这种类型的 SourceData 引用是只读的,不能用于设置值。我尝试了几种不同形式的 QueryArry1,包括“QueryArry1=ThisWorkbook.PivotCaches(2).SourceData”...我总是遇到同样的错误
    • 我不确定您的 QueryArry 的内容是什么,但我想您想更改发送到数据库的查询。更改 CommandText 对我有用。我在答案中添加了示例代码。
    • 数据透视缓存不断改变它们的索引...所以我正在尝试命令:"Sheets("Totals").PivotTables("PivotTable1").PivotCache.CommandText = "SELECT * FROM Totals “”但它给了我错误:“应用程序定义的或对象定义的错误”
    • 我能够使用我在答案中添加的代码更改 CommandText thorgh PivotTable。我还可以通过尝试将 CommandText 设置为错误的查询(例如“SEEELEKT * From ...”)或在查询中不包括数据库路径来复制您的错误。
    • 感谢您的帮助。虽然它仍然无法正常工作,但您确实帮助我完善了我的问题和方法。我已经创建了一个新线程来解决我在这里遇到的特定错误:stackoverflow.com/questions/1883440/…
    猜你喜欢
    • 2014-06-16
    • 1970-01-01
    • 2016-04-12
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多