我有一个工作簿,其中包含由宏更新的数据透视表。不过,在刷新数据之前,连接字符串会发生更改:
With ThisWorkbook.Connections("Data").ODBCConnection
.Connection = [Redacted]
.CommandText = "EXEC ExtractCases " & Client
.BackgroundQuery = False
.Refresh
End With
Run Code Online (Sandbox Code Playgroud)
这似乎导致数据透视表创建一个新连接(称为 要么Connection,Data1我似乎无法弄清楚它在它们之间进行选择的作用)并将其自身指向该连接。所以我必须添加这样的行:
Sheets("Pivot").PivotTables("Pivot").ChangeConnection ThisWorkbook.Connections("Data")
Sheets("Pivot").PivotTables("Pivot").PivotCache.Refresh
Run Code Online (Sandbox Code Playgroud)
这似乎有效(除非它不起作用),但在工作簿中留下了很多死连接,导致混乱。
我尝试过手动删除Connection连接,但随后它突然Data1无缘无故地自行命名,并且系统感到不安,因为无法Connection删除不存在的连接。
有什么明显的我做错了吗?有没有什么神奇的方法可以解决这个问题,这样它就不会从一开始就产生第二个问题,从而导致这些令人头痛的问题?
注意:我在 Excel 2010 中运行此代码,但工作簿必须在 2003 年之前可打开;然而,我在分发之前删除了 VB 模块,所以 2010 宏的东西很好,只是工作簿中的东西可能会被这个绊倒......
小智 3
我在 Excel 2010 中遇到了同样的问题(可能与早期版本相同,我不知道)。
我尝试了与您相同的方法,即在编辑连接字符串的 commandText 之后更改 VBA 代码中数据透视表的连接。和你一样,我注意到有时会成功,有时会失败。
我无法找出问题出现的原因以及上述方法在哪种情况下会成功或失败。
然而,我找到了一个可行的解决方案:在您的 VBA 代码中,您需要按上述顺序执行以下步骤:
注意:只有当只有一个数据透视表使用该连接时,这才有效。如果您通过复制第一个数据透视表创建了额外的数据透视表(即它们共享相同的数据透视表缓存),则上述过程将不起作用(我不知道为什么)。
但是,如果您仅使用一个带有连接字符串的数据透视表,则该方法将起作用。