刷新在Excel Vba中创建的数据透视表(ADODB连接)

时间:2014-08-29 08:26:15

标签: sql excel vba ms-access

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

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代码时,无法刷新数据透视表。实际上,必须删除并创建数据透视表。有没有办法可以这种方式创建数据透视表并刷新数据而不删除数据透视表。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

快速修复,具体取决于您通常更新SQL代码的方式,如下所示。

  • 在ACCESS 中,使用 SQL模式创建查询 SELECT * FROM Table1并将其另存为Query1

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

这样,出于所有实际目的,Excel会将Query1视为,您可以在Access中使Query1像您一样复杂,Excel仍将提取其所有内容,保持代码可重用。