[英]Refreshing a pivot table created in Excel Vba (ADODB Connection)
我可以使用以下代碼在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代碼時,樞軸無法刷新。 實際上,必須刪除並重新創建數據透視表。 有沒有一種方法可以以這種方式創建數據透視表並刷新數據而不刪除數據透視表。
上面的答案與我所尋找的不完全相同,因為不同的用戶會從數據庫中查詢並且也會使用參數,這可能在多個用戶同時查詢時引起問題。 但是我確實找到了解決問題的方法。
我在上面的問題中放置了代碼,我可以使用它最初創建我的數據透視表並通過所有數據。 然后,我構建一個單獨的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
快速修復如下,具體取決於您通常如何更新SQL代碼。
在ACCESS中 ,使用SQL模式作為SELECT * FROM Table1
創建一個查詢,並將其另存為Query1
在EXCEL中 ,將代碼修改為SELECT * FROM Query1
這樣,Excel會出於所有實際目的將Query1
視為表 ,並且您可以根據需要使Query1
中的Query1
變得復雜,Excel仍會提取其所有內容,從而使代碼可重復使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.