【发布时间】:2018-07-13 09:33:07
【问题描述】:
几个月来我一直在努力解决我的需求,今天我找到了解决方案,或者如果您愿意的话,可以解决它。
该解决方案的灵感来自我在这里找到的一篇帖子:
how to pass parameters to query in SQL (Excel)
而且,尽管我想感谢 @mono código 的想法,但由于我缺乏声誉,我无法在原始线程上对帖子发表任何评论。所以我想发布这个来感谢并帮助其他人度过难关。
我的第一个方法是使用 Power Query,但之后对脚本进行修改非常复杂。这种方法在 IMO 上要简单得多。
它基本上是获取连接的命令文本并即时修改它:
With ActiveWorkbook.Connections("MyConnection").OLEDBConnection
queryOriginalText = .CommandText
queryPreText = .CommandText
queryPostText = Replace(queryPreText, "SET @From=@From", "SET @From='" & Range("StartDate") & "'")
queryPreText = queryPostText
queryPostText = Replace(queryPreText, "SET @To=@To", "SET @To='" & Range("EndDate") & "'")
queryPreText = queryPostText
queryPostText = Replace(queryPreText, "SET @OrderNo=@OrderNo", "SET @OrderNo='" & Range("OrderNo") & "'")
.CommandText = queryPostText
ActiveWorkbook.Connections("MyConnection").Refresh
.CommandText = queryOriginalText
End With
我的脚本有 3 个变量用作过滤数据的条件:
@From、@To 和 @OrderNo。而且,当我在脚本上设置这些内容时,我会这样做:
SET @From=@From
SET @To=@To
SET @OrderNo=@OrderNo
在我的 VBA 中,我查找那些特定的字符串,并将它们一一替换为用户在工作表上输入的值,在具有范围名称的特定单元格上。
最后,我放回了原始文本,因此当用户点击运行宏的按钮时,要替换的字符串始终存在。这仅在您取消选中该选项时才有效
否则会出现运行时错误。
希望对你有帮助
【问题讨论】:
-
如果您的目标是提供问题和解决方案,请仅在问题部分中发布问题,然后在下面的答案区域中回答您自己的问题。
-
你为什么要这样做,究竟是什么?!
-
@ryguy72 例如,当从 MSSQL 检索数据并想要指定数据范围时。为此,用户必须编辑连接和脚本本身。对于某些用户来说,这是“高级”的东西,所以如果他们只在电子表格的两个单元格上指定日期,然后我在上面进行动态更改,那就更好了。