VBA выдает ошибку при вводе значений ячеек в SQL-запрос

#sql #vba #excel-2007

#sql #vba #excel-2007

Вопрос:

Я получаю следующую ошибку при вводе значений для моего SQL из определенных ячеек. Однако, когда я жестко кодирую значения в коде, он работает нормально. итак, это явно как-то связано с синтаксисом того, как я это написал.

Я хочу сделать это динамичным по нескольким причинам и надеюсь, что кто-нибудь сможет мне помочь.

Ошибка: ядро базы данных Microsoft Access не смогло найти объект «objectname»

Рабочий код, в котором значения жестко закодированы:

 mySQL = "SELECT * FROM [listname];"
With cnt
.ConnectionString = _
"Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=https://sharepoint.com/sites1/xx/;LIST= {0C3G7BTF-000E-4C16-8E07-E4B7F525069F};"
.Open
End With
  

Код, который не работает:

 mySQL = "SELECT * FROM ['" amp; Sheet3.Range("c1") amp; "'];"
With cnt
.ConnectionString = _
"Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=https://sharepoint.com/sites1/xx/;LIST= {'" amp; Sheet3.Range("d1") amp; "'};"
.Open
End With
  

Ответ №1:

Я бы посоветовал поместить значение строки вашего подключения в переменную и распечатать его (например, debug.print myConnectionString), чтобы выполнить сравнение символов для каждого символа.

Кроме того, у вас есть одинарные кавычки, окружающие вашу ссылку на sheet.range(«d1»)

 "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=https://sharepoint.com/sites1/xx/;LIST= {'" amp; Sheet3.Range("d1") amp; "'};"
  

Возможно, это причина вашей проблемы. Похоже, у вас та же проблема с назначением переменной MySQL.

Редактировать :

Возможно, это могло бы сработать :

 mySQL = "SELECT * FROM [" amp; Sheet3.Range("c1") amp; "];"
myConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=https://sharepoint.com/sites1/xx/;LIST= {" amp; Sheet3.Range("d1") amp; "};"
debug.print myConnectionString
'Open execution window (ctrl g) to get the value of myConnectionString

With cnt
.ConnectionString = myConnectionString
.Open
End With
  

Комментарии:

1. Удаление одинарных кавычек создает ожидаемую ошибку: end of statement

2. Не могли бы вы попробовать сохранить строку подключения в переменной (вместо того, чтобы напрямую назначать ее вашему объекту подключения), распечатать ее в окне выполнения и показать результат, чтобы мы могли сравнить его?

3. Кроме того, я думаю, что вы удалили двойную кавычку, а не одинарную кавычку.

4. Ранее я пытался присвоить строковой переменной, и мне повезло так же. не могли бы вы, пожалуйста, дать мне код для части, которую вы упоминаете об удалении кавычек? Возможно, я неверно истолковываю это по-другому и не работает, какую бы цитату я ни удалял. Кроме того, я не совсем уверен, как выполнить упомянутую вами функцию debug.print: p

5. Я попробовал это и получил ту же ошибку — ;LIST= { » amp; Sheet3.Range(«d1″) amp; » };»