我已经建立了 SQL Server 与存储过程所在数据库的连接。存储过程在 SQLServer 中运行良好。存储过程通过与 Excel 中的硬编码参数的连接运行得很好。我得到了我的数据集并将其插入到我的电子表格中。宏不起作用。在宏中,我尝试指向电子表格中包含参数值的范围,以便我可以将值键入电子表格中,然后让宏选取它们并将它们传递给存储过程。我对电子表格值和存储过程中的参数使用日期格式。我希望在宏运行时返回的数据集在电子表格中使用新数据进行更新。这是我的宏:
Sub GetHeatMapData()
With ActiveWorkbook.Connections("CARLA-PC-Billing-SP").OLEDBConnection.CommandText = "EXECUTE dbo.GetBillingHeatMap '" & Range("A9").Value & "" & Range("B9").Value & "'"
End With
ActiveWorkbook.Connections("CARLA-PC-Billing-SP").Refresh
End Sub
但是,如果我尝试从 Excel 中的宏运行存储过程,则会发生以下两种情况之一:
如果电子表格中存在从连接窗口运行存储过程创建的现有数据集,则宏运行时不会出现错误,但它不会拾取动态变量,因此数据不会按应有的方式更改。
如果我删除通过从连接窗口运行存储过程创建的数据集,选择数据应开始的单元格,然后触发宏,我会收到“下标超出范围”错误,但什么也没有发生。
我正在设置NOCOUNT
在我的存储过程结束时关闭。以下是存储过程中的参数定义:
-- Add the parameters for the stored procedure here
@StartDate Date,
@EndDate Date
Here are my connection settings:
我的问题是为什么存储过程无法从 Excel 电子表格单元格获取参数并使用它们来过滤返回的数据?
1 – 在 Excel 中公开参数
2 – 定义参数从excel输入
3 – 确定并刷新。
好的,
您不必在命令文本中输入参数,您可以以期望参数从 Excel 单元传递到存储过程的方式定义命令文本。如果您所在的国家/地区不使用美国数据格式,这尤其有用。此外,它使最终用户能够使用其他一些参数进行刷新,而无需编辑命令文本。
这很简单 - 在 Excel 中,在您输入的存储过程名称之后的命令文本中连接到 SQL Server ? - 尽可能多 ?因为您的存储过程需要不同的参数(除以,) - 像这样 - 执行 dbo.your_procedure ?,?
之后,您进入参数选项卡(在与输入命令文本相同的表单上)并从女巫单元定义将参数传递给存储过程。当然,在存储过程中还需要指定需要哪些参数:
创建过程 [dbo].[your_procedure]
(
@DateFrom 日期时间,
@DateTo 日期时间
)
作为
--- 您的存储程序 ---
在 Excel 中 - 参数 1 将发送到存储过程的 Date From 参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)