【问题标题】:Excel VBA pass parameter to OLEDBConnectionExcel VBA 将参数传递给 OLEDBConnection
【发布时间】:2025-01-14 10:30:01
【问题描述】:

在 Excel 工作簿中,我有几个到 SQL Server 数据库的连接。我以为我可以运行一个像下面这样的小脚本,但它没有做我想要的。我想刷新 OLEDBConnection,并传入 StartDate 和 EndDate,但它实际上并没有与连接进行通信。

Sub RefreshWithDates()

Dim StartDate As Date
Dim EndDate As Date

StartDate = Sheets("Pivot_Summary").Range("B1").Value
EndDate = Sheets("Pivot_Summary").Range("B2").Value

    With ActiveWorkbook.Connections("FMDDATA_HIST_SPLIT").OLEDBConnection
        .CommandText = "SELECT * FROM RECONCILIATION.dbo.TBL_FMDDATA_HIST_SPLIT Where AsOfDate between '" & StartDate & "' & " And " & '" & EndDate & "'"
        ActiveWorkbook.Connections("FMDDATA_HIST_SPLIT").Refresh
    End With

End Sub

【问题讨论】:

  • 也许它正在通信但失败,因为您的 sql server 期望的日期格式与 VBA 为日期保存的日期格式不同。考虑使用Test() 函数在你的sql 中更改Text(StartDate, 'YYYY-MM-DD') 之类的格式。
  • 哦,我知道它现在是如何工作的了。您必须设置命令类型 = 默认,然后相应地更新命令文本。就是这样。

标签: vba excel


【解决方案1】:

您的.CommandText 字符串在AND 周围有一个错误(注意它是蓝色的......它被解析为VBA 关键字And)。

应该是:

"EXEC SELECT * FROM RECONCILIATION.dbo.TBL_FMDDATA_HIST_SPLIT 
WHERE AsOfDate between '" & StartDate & "'" & " AND " & "'" & EndDate & "'"

【讨论】: