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

时间:2016-02-15 14:24:50

标签: sql excel vba excel-vba data-connections

我真的希望有人可以帮助我解决我花费数小时试图修复但没有结果的问题。

我正在尝试使用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语法错误':

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

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

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

提前致谢

PS:刚刚看了预览。不知怎的,``在最后的交易日期已被删除。

1 个答案:

答案 0 :(得分:0)

假设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" & "'}"