Не должно быть никаких проблем, вызванных ячейкой Excel, содержащей более 170 символов.Я предлагаю разбить строку об ошибках, чтобы точно определить, в чем проблема.
Заменить это:
.CommandText = Array("SELECT COLUMN1, COLUMN2 FROM TABLENAME (nolock) WHERE COLUMN1 IN (" & ActiveWorkbook.Sheets("Sheet1").Range("e607").Value & ")")
На это:
Dim rng As Range, sSql As String
Set rng = ActiveWorkbook.Sheets("Sheet1").Range("e607")
Debug.Print "Range.Value = |" & rng.Value & "|"
sSql = "SELECT COLUMN1, COLUMN2 FROM TABLENAME (nolock) WHERE COLUMN1 IN (" & rng.Value & ")"
Debug.Print "SQL = |" & sSql & "|"
.CommandText = sSql
Debug.Print
печатает в непосредственное окно, чтобы вы могли дважды проверить, что переменные содержат то, что вы ожидаете от них.Мне нравится использовать |
вместо "
при отладке строк, потому что у меня почти никогда не бывает |
внутри строки.
Кроме того, я бы не стал использовать Array()
для CommandText
илиConnection
.Я бы переделал вашу первую строку, чтобы она выглядела примерно так для удобства чтения.
With ActiveSheet.QueryTables.Add( _
Connection:="OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI" _
& ";Persist Security Info=True;Data Source=anglobisql" _
& ";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096" _
& ";Workstation ID=MyIDHere;Use Encryption for Data=False" _
& ";Tag with column collation when possible=False;Initial Catalog=DATABASENAME" _
, Destination:=Range("A1"))