This isn't the issue, but you don't actually need the " & Chr(13) & " " & Chr(10) & " in your code, as long as you put a space between the two pieces it will work. Here, I've split the text out, it has some obvious issues:
"SELECT
table_name.field1_name,
table_name.field2_name,
table_name.field3_name,
table_name.field4_name,
table_name.field5_name,
table_name.field6_name,
table_name.field7_name,
table_name.field8_name,
table_name.field9_name,
table_name.field10_name,
table_namefield11_name,
table_name.field12_name,
table_namefield13_name,
table_namefield14_name,
table_namefield15_name,
table_namefield16_name "
"FROM db_firmprod.dbo.table_name "
"GROUP BY
table_name.field1_name,
table_name.field2_name,
table_name.field3_name,
table_name.field4_name,
table_name.field5_name,
table_name.field6_name,
table_name.field7_name,
table_name.field8_name,
table_name.field9_name,
table_name.field10_name,
table_namefield11_name,
table_name.field12_name,
table_namefield13_name,
table_namefield14_name,
table_namefield15_name,
table_namefield16_name "
"HAVING
(table_name.field1_name Like 'APPLE'
Or table_name.field1_name Like 'BANANA'
Or table_name.field1_name Like 'GRAPE')
AND (table_name.field14={ts '2026-01-31 00:00:00'})
AND (table_name.field15_name={ts '2026-02-14 00:00:00'})" )
One of the things I like to do, which is a bit of a pain I will admit, when building SQL statements is to put either individual fields or blocks on a single line, it makes them easier to read:
strSQL = "SELECT " _
& "table_name.field1_name, " _
& "table_name.field2_name, " _
& "table_name.field3_name, " _
& "table_name.field4_name, " _
& "table_name.field5_name, " _
& "table_name.field6_name, " _
& "table_name.field7_name, " _
& "table_name.field8_name, " _
& "table_name.field9_name, " _
& "table_name.field10_name, " _
& "table_name.field11_name, " _
& "table_name.field12_name, " _
& "table_name.field13_name, " _
& "table_name.field14_name, " _
& "table_name.field15_name, " _
& "table_name.field16_name " _
& "FROM db_firmprod.dbo.table_name " _
& "GROUP BY" _
& "table_name.field1_name, " _
& "table_name.field2_name, " _
& "table_name.field3_name, " _
& "table_name.field4_name, " _
& "table_name.field5_name, " _
& "table_name.field6_name, " _
& "table_name.field7_name, " _
& "table_name.field8_name, " _
& "table_name.field9_name, " _
& "table_name.field10_name, " _
& "table_name.field11_name, " _
& "table_name.field12_name, " _
& "table_name.field13_name, " _
& "table_name.field14_name, " _
& "table_name.field15_name, " _
& "table_name.field16_name " _
& "HAVING "
& "(table_name.field1_name Like 'APPLE' " _
& "Or table_name.field1_name Like 'BANANA' " _
& "Or table_name.field1_name Like 'GRAPE') " _
& "AND (table_name.field14_name={ts '2026-01-31 00:00:00'}) " _
& "AND (table_name.field15_name={ts '2026-02-14 00:00:00'})"
Then have the line read something like:
.CommandText = Array( strsql )
James has some good ideas as well, all I've done here is clean up a bit of SQL. If you have time, I would recommend studying his post to understand what he is proposing.