Присоединение к выражению, которое не поддерживается, произошло, когда осталось присоединиться к двум листам из двух разных книг

Я хотел бы оставить два листа из двух разных книг. Ниже мой код, и я столкнулся с ошибкой «JOIN выражение не поддерживается», когда я выполнил sql.

Sub RunSELECT() Dim cn As Object, rs As Object, output As String, sql As String Dim pre_reviewed_file As String, cond As String Dim fso As Object, outfile As String, file_obj As Object Set fso = CreateObject("Scripting.FileSystemObject") outfile = "C:\Users\ZhouK\Desktop\offline comments\offline-comments\result.txt" Set file_obj = fso.CreateTextFile(outfile, True) pre_reviewed_file = "56022473AML2002 OFFLINE listings 20161010 - reviewed.xls" 'MsgBox ActiveWorkbook.FullName '---Connecting to the Data Source--- Set cn = CreateObject("ADODB.Connection") With cn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & ActiveWorkbook.Path & "\" & ActiveWorkbook.Name & ";" & _ "Extended Properties=""Excel 12.0 Xml;HDR=YES"";" .Open End With cond = "1=1" With ActiveWorkbook.Sheets("LIS01").Rows(3) For i = 1 To 24 cond = cond & " and a.[" & .Cells(i).Value & "]=b.[" & .Cells(i).Value & "]" Next End With sheet_name = "LIS01" '---Run the SQL SELECT Query--- sql = "SELECT b.[COMMENTS] FROM [" & sheet_name & "$A3:AZ3000] a left join [Excel 12.0;HDR=Yes;Database=" & ActiveWorkbook.Path & _ "\" & pre_reviewed_file & ";].[" & sheet_name & "$A3:AZ3000] b on " & cond file_obj.Write (sql) file_obj.Close Set rs = cn.Execute(sql) ActiveWorkbook.Sheets("me").Range("A1").CopyFromRecordset rs 'Do 'output = output & rs(0) & ";" & rs(1) & ";" & rs(2) & vbNewLine 'Debug.Print rs(0); ";" & rs(1) & ";" & rs(2) 'rs.Movenext 'Loop Until rs.EOF 'MsgBox output '---Clean up--- rs.Close cn.Close Set cn = Nothing Set rs = Nothing End Sub 

Настоящий sql

 select b.[COMMENTS] from [LIS01$A3:AZ3000] a left join [Excel 12.0;HDR=Yes;Database=C:\Users\ZhouK\Desktop\offline comments\offline-comments\56022473AML2002 OFFLINE listings 20161010 - reviewed.xls;].[LIS01$A3:AZ3000] b on 1=1 and a.[Study Site Identifier]=b.[Study Site Identifier] and a.[Unique Subject Identifier]=b.[Unique Subject Identifier] and a.[CM Record Number]=b.[CM Record Number] and a.[Medication]=b.[Medication] and a.[Indication]=b.[Indication] and a.[AE-Date-Term1]=b.[AE-Date-Term1] and a.[AE-Date-Term2]=b.[AE-Date-Term2] and a.[AE-Date-Term3]=b.[AE-Date-Term3] and a.[AE-Date-Term4]=b.[AE-Date-Term4] and a.[AE-Date-Term5]=b.[AE-Date-Term5] and a.[MH-Date-Term1]=b.[MH-Date-Term1] and a.[MH-Date-Term2]=b.[MH-Date-Term2] and a.[MH-Date-Term3]=b.[MH-Date-Term3] and a.[MH-Date-Term4]=b.[MH-Date-Term4] and a.[MH-Date-Term5]=b.[MH-Date-Term5] and a.[Prohylaxis or Other]=b.[Prohylaxis or Other] and a.[Dose]=b.[Dose] and a.[Dose Unit]=b.[Dose Unit] and a.[Dose Form]=b.[Dose Form] and a.[Frequency]=b.[Frequency] and a.[Route]=b.[Route] and a.[Ongoing]=b.[Ongoing] and a.[CM Start Date]=b.[CM Start Date] and a.[CM End Date]=b.[CM End Date] 

Я действительно не знаю, какая часть ошибочна. Не могли бы вы заглянуть в мой код?

Проблема заключается в вашем SQL JOIN поскольку выражение on 1=1 не разрешено в предложении ON для диалекта Jet / ACE SQL. Поскольку вам нужен этот элемент, чтобы инициировать строку для вашего цикла, подумайте об удалении его после цикла:

 con = Replace(con, "on 1=1 and ", "on ") 

В качестве альтернативы перезапишите эквивалентный запрос, перемещая выражения ON в WHERE и разделяя запятую таблицы FROM . Это называется неявным соединением, а не явным соединением с использованием JOIN , оба из которых равны оценке и производительности:

 select b.[COMMENTS] from [LIS01$A3:AZ3000] a, [Excel 12.0;HDR=Yes;Database=C:\Users\ZhouK\Desktop\offline comments\offline-comments\56022473AML2002 OFFLINE listings 20161010 - reviewed.xls;].[LIS01$A3:AZ3000] b where 1=1 and a.[Study Site Identifier]=b.[Study Site Identifier] and a.[Unique Subject Identifier]=b.[Unique Subject Identifier] and a.[CM Record Number]=b.[CM Record Number] and a.[Medication]=b.[Medication] and a.[Indication]=b.[Indication] and a.[AE-Date-Term1]=b.[AE-Date-Term1] and a.[AE-Date-Term2]=b.[AE-Date-Term2] and a.[AE-Date-Term3]=b.[AE-Date-Term3] and a.[AE-Date-Term4]=b.[AE-Date-Term4] and a.[AE-Date-Term5]=b.[AE-Date-Term5] and a.[MH-Date-Term1]=b.[MH-Date-Term1] and a.[MH-Date-Term2]=b.[MH-Date-Term2] and a.[MH-Date-Term3]=b.[MH-Date-Term3] and a.[MH-Date-Term4]=b.[MH-Date-Term4] and a.[MH-Date-Term5]=b.[MH-Date-Term5] and a.[Prohylaxis or Other]=b.[Prohylaxis or Other] and a.[Dose]=b.[Dose] and a.[Dose Unit]=b.[Dose Unit] and a.[Dose Form]=b.[Dose Form] and a.[Frequency]=b.[Frequency] and a.[Route]=b.[Route] and a.[Ongoing]=b.[Ongoing] and a.[CM Start Date]=b.[CM Start Date] and a.[CM End Date]=b.[CM End Date] 
  • Ежедневный отчет SQL для определения изменений
  • Импорт SSIS Excel в SQL - первые 6 строк файла содержат информацию, связанную с заголовком
  • Лист запроса Excel в MS-Access VBA (с использованием набора записей ADODB)
  • Добавить столбец счетчика в таблицу для каждого n строк
  • Группа Microsoft Query / Partition By
  • Функция Cube в Excel с помощью Powerpivot для отображения определенных значений строк на листе
  • Копирование выборочных столбцов из одного листа в другой в одной книге
  • Получить данные столбца из excel с помощью SQL
  • Развертывание базы данных, автоматический график и электронная почта в определенное время дня
  • Как я могу выбрать набор строк и столбцов из листа excel в запросе для C #?
  • Форсировать тип данных при импорте из Excel
  • Давайте будем гением компьютера.