使用VBA
问题描述:
这是一个奇怪的一个,而我事先道歉在Excel电子表格中从SQL SP提取数据 - 我有以下VBA代码在一个名为“刷新”一个ActiveX按钮:使用VBA
Sub Refresh_Click()
With ActiveWorkbook.Connections("Lender Pipeline").OLEDBConnection
.CommandText = "EXECUTE dbo.sp_Lender_Pipeline " & Range("Q2").Value
End With
ActiveWorkbook.Connections("Lender Pipeline").Refresh
End Sub
它通常做的,根据Q2单元格的值从SQL SP中提取数据,并根据该值 - 这是我手动添加到单元格中的数字刷新SP表格。该数字通常在1到120之间(基于SP内的ID)。
问题:
- 看来输入特定号码时,只拉数据。即29
- 对于其他数字,我必须手动点击'全部刷新'。
- 如果我在SQL Server Management中手动执行SP,它工作得很好,所以问题似乎在于VBA。
- 如果我手动从Excel电子表格中执行SP,它也能正常工作...
有没有人有一个线索,为什么这可能发生吗?它可能是VBA,还是别的?让我知道是否需要进一步澄清。
谢谢你。
答
奇怪的是我的同事之前也有过这个问题。尝试了各种各样的修复,没有一个看起来工作,但以完全相同的方式重建工作簿似乎纠正了它。
不是最好的解决方案,但它已在过去工作。如果没有,请尝试使用VBA在更改命令文本后调用refreshall命令并查看是否有帮助。
答
非常感谢您的建议 - 它会显示在连接属性禁用后台刷新做了窍门。
您是否运行SQL事件探查器以确保number参数按预期进入SP,并且该过程实际上正在被解雇?无论参数如何,返回列的名称和数量是否一致?也许SET NOCOUNT ON;看起来好像是因为Refresh All似乎起作用。在Excel 2013中,您现在在数据连接中有一个新的复选框选项。新选项是在使用“全部刷新”时是否刷新特定连接。这是否被检查? “单元格值更改时自动刷新”复选框怎么样?在这里钓鱼,但试图帮助。 :-) – DanielG
有一件事几乎总是有效的,就是让SP填充一个TEMP表,并将Excel表基于TEMP表,并由SP更新。 – DanielG