Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 刷新在Excel Vba(ADODB连接)中创建的数据透视表_Sql_Excel_Vba_Ms Access - Fatal编程技术网

Sql 刷新在Excel Vba(ADODB连接)中创建的数据透视表

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

我可以使用以下代码在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(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