По сути, ваша логика OR
и AND
сливаются друг с другом.Вы должны включить круглые скобки вокруг условий OR
, чтобы они рассматривали одно отдельное условие включительно с другими условиями AND
.
Кроме того, нет причин для объединения SQL в VBA.Date()
, Time()
, Now()
доступны в MS Access SQL:
myQuery = "SELECT ORDER, [PART NUMBER], [DEPT RESP], [AREA RESP], [START DATE]" _
& " FROM INITIAL_PHASE" _
& " WHERE ([PLANNER NAME] = 'Homer' OR [PLANNER NAME] = 'Bart' OR [PLANNER NAME] = 'Marge')" _
& " AND [AREA RESP] <> 'Stamping'" _
& " AND [START DATE] BETWEEN Date() AND Date() + 30" _
& " AND [PART NUMBER] NOT LIKE '%R'" _
& " ORDER BY [START DATE]"
Еще лучше, потому что это чистый запрос SQL, и вы используете предложения WHERE
и ORDER BY
, которые могутбыть в состоянии индексировать, сохранить ваш запрос как хранимый запрос MS Access и избегать любого SQL в VBA.Хранимые запросы более эффективны, чем строковые SQL, запускаемые на лету, поскольку механизм Access сохраняет лучший план выполнения для сохраненных запросов.
Set rst = New ADODB.Recordset
rst.Open "mySavedQuery", strConn, adOpenKeyset, adLockBatchOptimistic
ThisWorkbook.Sheets("DataSheet").Cells(2, "A").CopyFromRecordset rst
rst.Close
Set rst = Nothing