【问题标题】:Pulling data from SQL SP in Excel spreadsheet using VBA使用 VBA 从 Excel 电子表格中的 SQL SP 中提取数据
【发布时间】:2017-06-15 16:42:04
【问题描述】:

这是一个奇怪的问题,我事先道歉 - 我在一个名为“刷新”的 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还是其他?让我知道是否需要进一步澄清。

谢谢。

【问题讨论】:

  • 您是否运行 SQL Profiler 以确保 number 参数按预期进入 SP,并且该过程实际上正在被触发?无论参数如何,返回列的名称和数量是否一致?也许 SET NOCOUNT ON;似乎是因为 Refresh All 似乎有效。在 Excel 2013 中,您现在在数据连接中有一个新的复选框选项。新选项是如果使用“全部刷新”,是否刷新特定连接。这是检查吗? “当单元格值更改时自动刷新”复选框怎么样?在这里钓鱼,但试图提供帮助。 :-)
  • 几乎总是可行的一件事是让 SP 填充一个 TEMP 表,并将 Excel 表基于 TEMP 表,该表由 SP 更新。

标签: excel vba button activex


【解决方案1】:

奇怪的是,我的一位同事之前也遇到过同样的问题。尝试了各种修复方法,但似乎都没有效果,但以完全相同的方式重建工作簿似乎可以更正它。

不是最好的解决方案,但它在过去有效。如果没有,请尝试在更改命令文本后使用 VBA 调用 refreshall 命令,看看是否有帮助。

【讨论】:

    【解决方案2】:

    非常感谢您的建议 - 在连接属性中禁用后台刷新似乎起到了作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      • 2011-05-24
      • 2011-04-03
      • 2021-07-26
      相关资源
      最近更新 更多