我可以使用以下代码在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代码时,无法刷新数据透视表。实际上,必须删除并创建数据透视表。有没有办法可以这种方式创建数据透视表并刷新数据而不删除数据透视表。
答案 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仍将提取其所有内容,保持代码可重用。