2016-02-15 3 views
2

Я действительно надеюсь, что кто-то здесь может помочь мне с проблемой, которую я потратил часы, пытаясь исправить без результата.Microsoft Query in Excel VBA - как передать фильтры даты

Я пытаюсь установить соединение передачи данных с файлом csv с использованием запроса MS в Excel VBA. Мне нужно отфильтровать данные из файла 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: просто смотрел на предварительный просмотр. Так или иначе, `` LAST TRADED DATE были удалены здесь.

+0

Вы пробовали следующий 'CDate (sValnDate)' или 'Format (sValnDate, "дд-ммм-уу")' любой из них может работать как возможный, чтобы переменная, содержащая дату, не была должным образом отформатирована. – izzymo

+0

Спасибо. Просто попробовал оба, с и без «{ts}», но никто не работал. Если я использую cDate без фигурных скобок, 'LAST TRADE DATE' = cDate (sValnDate), макрос запускается, но не извлекает никаких записей. – KMLN

ответ

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" & "'}" 
+0

Спасибо Jeeped, который работал как шарм! И очень хорошо объяснил ... – KMLN