簡體   English   中英

刷新在Excel Vba中創建的數據透視表(ADODB連接)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM