【问题标题】:Refreshing a pivot table created in Excel Vba (ADODB Connection)刷新在 Excel Vba 中创建的数据透视表(ADODB 连接)
【发布时间】:2014-08-29 08:26:14
【问题描述】:

我可以使用以下代码在 excel vba 2010 中成功创建数据透视表,其中数据来自 MS Access 数据库,

Dim con As New ADODB.Connection

Dim rs As New ADODB.Recordset

con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=H:\SQL.accdb"

rs.Open "SELECT * FROM Table1", con, adOpenStatic, adLockReadOnly

Set piv = ActiveWorkbook.PivotCaches.Create(xlExternal)

Set piv.Recordset = rs

piv.CreatePivotTable TableDestination:=Range("A1"), TableName:="P2"

con.Close

Set rs = Nothing

Set con = Nothing

但是当我更改记录集的 SQL 代码时,无法刷新数据透视表。事实上,必须删除并重新创建数据透视表。有没有办法我可以通过这种方式创建数据透视表并在不删除数据透视表的情况下刷新数据。

【问题讨论】:

    标签: sql excel vba ms-access


    【解决方案1】:

    上面的答案并不是我想要的,因为不同的用户会从数据库中查询并且也会使用参数,这可能会在多个用户同时查询时导致问题。但我确实找到了解决问题的方法。

    我在上面的问题中放置的代码,我可以用来最初创建我的数据透视表并提取所有数据。然后我构建一个单独的 Sub 可以刷新如下所示的数据透视表,

    Dim con As New ADODB.Connection

    Dim rs As New ADODB.Recordset

    con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=H:\SQL.accdb"

    rs.Open "SELECT * FROM Table1", con, adOpenStatic, adLockReadOnly

    With Sheets(1).PivotTables("P2").PivotCache

        Set .Recordset = rs
        .Refresh
    

    End With

    Set rs = Nothing

    con.Close

    Set con = Nothing

    【讨论】:

      【解决方案2】:

      一个快速修复,取决于您通常如何更新 SQL 代码,如下所示。

      • 在 ACCESS 中,创建一个查询,使用 SQL 模式 作为 SELECT * FROM Table1 并保存为Query1

      • 在EXCEL中,将代码修改为SELECT * FROM Query1

      这样,Excel 会将Query1 视为表格 用于所有实际用途,您可以在 Access 中将Query1 设置为任意复杂,Excel 仍会提取所有内容,保持你的代码可重用。

      【讨论】:

        猜你喜欢
        • 2021-09-10
        • 2015-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        • 1970-01-01
        • 1970-01-01
        • 2015-09-25
        相关资源
        最近更新 更多