2014-08-29 123 views
0

我可以成功地创建在Excel VBA中2010用下面的代码,其中所述数据来自一个MS访问数据库中的数据透视表,刷新在Excel VBA中(ADODB连接)创建的透视表

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代码,然后枢轴不能被刷新。事实上,数据透视表必须被删除和创建。有没有办法我可以这样创建数据透视表并刷新数据而不删除数据透视表。

回答

1

以上回答不太我是什么样子的为不同的用户会从数据库中查询和将要使用的参数为好,这可能会导致问题,当在同一时间多个用户查询。但我确实找到了解决我的问题的方法。

我在我的问题放在上面的代码,我可以用它来最初创建我的支点,并通过把所有的数据。然后我建立一个独立的子,可以刷新数据透视表(如下所示),

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

0

快速修复,这取决于你平时是怎么更新的SQL代码,如下所示。

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

  • 在EXCEL,修改代码以SELECT * FROM Query1

这样,Excel将视为Query1作为所有的实际目的,你可能在访问使Query1那样复杂,只要你愿意,Excel将仍然拉起它的所有内容,使您的代码重用。