Excel VBA 中的 Microsoft Query - 如何传递日期过滤器

Microsoft Query in Excel VBA - how to pass date filters

我真的希望这里有人能帮助我解决我花了几个小时试图解决但没有结果的问题。

我正在尝试在 Excel VBA 中使用 MS 查询与 csv 文件建立数据连接。我需要通过在特定列上应用日期过滤器来将 csv 文件中的数据过滤到电子表格中。当日期固定时(即硬编码在 VBA 中),连接工作绝对正常。但是,我希望日期是用户输入的,这就是我遇到问题的地方。基本上,我不确定如何将日期变量传递给连接。

当宏正常工作时,SQL 语句如下所示:

.CommandText = "SELECT * FROM " & csvName & " WHERE SECTYPE='GS' AND LAST TRADED DATE={ts '2016-01-29 00:00:00'}"

当我尝试通过变量 sValnDate 传递日期时,我得到 'SQL syntax error':

.CommandText = "SELECT * FROM " & csvName & " WHERE SECTYPE='GS' AND LAST TRADED DATE={ts " & sValnDate & "}"

我尝试了几种变量配置。我试图将它作为日期传递,一个与正确命令中完全相同的字符串,一个按照正确命令中要求格式化的日期,保留和删除变量的每种格式的大括号等,但没有任何效果。

为了简单起见,我刚刚在这里提出了 1 个声明。但是,如果您需要查看整个块(不超过 15-20 行),请告诉我。

提前致谢

PS: 刚看了预告。不知何故,最后交易日期附近的``已在此处删除。

假设 sValnDate 是一个看起来像 2016-01-29 00:00:00 的字符串,那么您只是缺少刻度线(又名 单引号 或 Chr(39)) .

.CommandText = "SELECT * FROM " & csvName & _
               " WHERE [SECTYPE]='GS' AND [LAST TRADED DATE]={ts '" & sValnDate & "'}"

如果 sValnDate 是实际日期,则将其格式化为

.CommandText = "SELECT * FROM " & csvName & _
               " WHERE [SECTYPE]='GS' AND [LAST TRADED DATE]={ts '" & _
               Format(sValnDate, "yyyy-mm-dd hh:mm:ss" & "'}"