【发布时间】:2015-01-25 01:28:03
【问题描述】:
我已经与这个问题作斗争了几天,阅读了很多关于重命名连接的帖子,但仍然无法实现我所需要的。
基本上我有一个工作簿,其中有多个工作表,每个工作表都有一个使用不同连接的不同数据透视表。
我需要使用 VBA 将日期范围标准从“控制”选项卡插入到每个连接的 sql 语句中,因为我们都知道枢轴不能使用?参数。
但是,我们也知道,当您修改连接时,Excel 会重命名连接,因此使用 VBA 更改命令文本最终会创建新连接并留下冗余连接。
使用此论坛中的其他一些非常有用的帖子,我成功地设法 - 更改命令文本 - 删除旧连接并重命名新连接,假设其名称为“连接”
因此:
text = "... new SQL query here..."
ActiveWorkbook.Connections("GLCosts").ODBCConnection.CommandText = text
' assume excel has renamed the "GLCosts" connection to "Connection"
ActiveWorkbook.Connections("Connection").Refresh
' delete the original and rename the new one to the old name
ActiveWorkbook.Connections("GLCosts").Delete
ActiveWorkbook.Connections("Connection").name = "GLCosts"
只要每个 Sub() 依次执行此操作,就可以了,因为“新”连接名称将始终为“Connection”(即不是“Connection1”等)
但是 我发现 Excel 仅在 COMMAND.TEXT 发生更改时重命名连接
因此,如果用户实际上并没有更改日期标准值(保存在 Sheets("Control").Range("D4") 中)但确实运行宏来刷新枢轴,那么宏将失败,因为命令文本没有被修改,也没有新的连接字符串可以重命名为旧名称。
所以.... 我试图变得聪明。在每个 Sub() 中,我首先设置 text = "...一个有效的 sql 查询,但不是我想要的那个...",然后用这个虚拟查询替换连接的 command.text ,从而强制 excel 创建一个新连接我可以重命名。然后,当我设置 text =“...正确的 sql 查询”时,excel 将再次创建一个名为“Connection”的新连接,我可以重复重命名和删除步骤。
这应该没问题,但由于某种原因,它只是崩溃了 excel,我没有再次尝试过
有人对此有实际的解决方案吗?我应该再试试聪明的东西吗?
感谢您的任何想法
【问题讨论】:
-
不敢相信没有人解决了这个问题。我定义得不好?
标签: excel connection-string pivot-table vba