Sql 刷新在Excel Vba(ADODB连接)中创建的数据透视表
我可以使用以下代码在excel vba 2010中成功创建透视表,其中数据来自MS access数据库Sql 刷新在Excel Vba(ADODB连接)中创建的数据透视表,sql,excel,vba,ms-access,Sql,Excel,Vba,Ms Access,我可以使用以下代码在excel vba 2010中成功创建透视表,其中数据来自MS access数据库 Dim con作为新的ADODB连接 Dim rs作为新的ADODB.Recordset con.Open“Provider=Microsoft.ACE.OLEDB.12.0;数据源=H:\SQL.accdb” rs.Open“从表1中选择*”、con、adOpenStatic、adLockReadOnly Set piv=ActiveWorkbook.PivotCaches.Create(x
Dim con作为新的ADODB连接
Dim rs作为新的ADODB.Recordset
con.Open“Provider=Microsoft.ACE.OLEDB.12.0;数据源=H:\SQL.accdb”
rs.Open“从表1中选择*”、con、adOpenStatic、adLockReadOnly
Set piv=ActiveWorkbook.PivotCaches.Create(xlExternal)
Set piv.Recordset=rs
piv.createPivotTableDestination:=范围(“A1”),TableName:=“P2”
con.Close
Set rs=Nothing
Set con=Nothing
但是,当我更改记录集的SQL代码时,pivot无法刷新。事实上,数据透视表必须被删除并创建。有没有一种方法可以这样创建透视表并刷新数据而不删除透视表。根据您通常更新SQL代码的方式,快速修复方法如下所示
- 在ACCESS中创建一个查询,使用SQL模式作为
从表1中选择*并将其另存为
Query1
- 在EXCEL中,将代码修改为
从查询1中选择*
这样,Excel将把
Query1
视为一个表,用于所有实际目的,并且您可以在Access中使Query1
尽可能复杂,Excel仍将调出其所有内容,保持代码的可重用性。上面的答案与我想要的不太一样,因为不同的用户将从数据库中查询,并且也将使用参数,这可能会在多个用户同时查询时导致问题。但我确实找到了解决问题的方法
我在上面的问题中放置的代码,我可以用来最初创建我的轴心,并将所有的数据拉过。然后我构建了一个单独的子组件,可以刷新透视表,如下所示:
Dim con作为新的ADODB连接
Dim rs作为新的ADODB.Recordset
con.Open“Provider=Microsoft.ACE.OLEDB.12.0;数据源=H:\SQL.accdb”
rs.Open“从表1中选择*”、con、adOpenStatic、adLockReadOnly
带有表(1)。数据透视表(“P2”)。数据透视缓存
Set .Recordset = rs
.Refresh
以
Set rs=Nothing
con.Close
Set con=Nothing