sql-server - VBA只清除数据透视表缓存,但保留数据透视表结构

标签 sql-server vba pivot-table

如何使用 VBA 清除数据透视表缓存,但不破坏数据透视表结构?我的数据透视表已连接到外部数据源。 SQL 源决定哪个用户应该看到数据的哪一部分。当表被刷新时,源填充表。我想保存 Excel 文件并使用干净的数据透视表(里面没有数据)分发它。

结果我想得到这个:

enter image description here

我已经围绕这段代码进行了试验,但没有成功。 VBA 中没有 PivotCaches.Clear 这样的东西。

Sub PT_cache_clear()
    For Each pc In ActiveWorkbook.PivotCaches

        pc.Clear

    Next pc
End Sub

我找到的唯一好的解决方案是使用有权访问 SQL Server 源但不允许查看任何单个数据记录的用户来刷新表。

想法:

ActiveSheet.PivotTables("PivotTable1").SaveData = False

似乎不会导致预期的结果。

最佳答案

我这样做的方法是使用将返回表结构但具有 0 条记录的查询进行刷新。因此,如果从类似的 View 中选择:

select top 0 * 
from vw_MyPivotData

如果使用存储过程,您可以发送一个参数来确保不会返回任何记录,例如您知道数据中不存在的过滤器或为不返回任何记录而设计的特殊参数。

关于sql-server - VBA只清除数据透视表缓存,但保留数据透视表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32271306/

相关文章:

vba - 随机化似乎错过了许多可能的种子

java - VBA/Excel 到 Java 的 dll/exe

php - MySQL 数据透视表 - 将行转换为列

mysql - MySQL-使用分组依据(数据透视表)的行到列(动态)

sql - 使用主键上不存在的情况

sql-server - SQL Server 数据库与团队共享?

SQL - 在另一个带有更新的身份种子的插入中插入查询

Excel VBA datediff 一起计算月、日和月?

Python Pandas pivot_table 在 pivot 之后缺少列

sql-server - 基于复合主键的自增Id