将单元格值提取到 SQL 查询中时 VBA 引发错误
Posted
技术标签:
【中文标题】将单元格值提取到 SQL 查询中时 VBA 引发错误【英文标题】:VBA throws an error when picking up cell values into SQL query 【发布时间】:2020-12-20 16:51:06 【问题描述】:从某些单元格中为我的 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 ['" & Sheet3.Range("c1") & "'];"
With cnt
.ConnectionString = _
"Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=https://sharepoint.com/sites1/xx/;LIST= '" & Sheet3.Range("d1") & "';"
.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= '" & Sheet3.Range("d1") & "';"
也许这些是您的问题的原因。您似乎在 mySQL 变量分配中遇到了同样的问题。
编辑:
也许这可行:
mySQL = "SELECT * FROM [" & Sheet3.Range("c1") & "];"
myConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=https://sharepoint.com/sites1/xx/;LIST= " & Sheet3.Range("d1") & ";"
debug.print myConnectionString
'Open execution window (ctrl g) to get the value of myConnectionString
With cnt
.ConnectionString = myConnectionString
.Open
End With
【讨论】:
删除单引号会产生预期的:语句结束错误 能否尝试将连接字符串存储在一个变量中(而不是直接将其分配给您的连接对象),并将其打印到执行窗口并显示结果以便我们进行比较? 另外,我认为您删除了双引号,而不是单引号。 我之前确实尝试过分配给一个字符串变量,并且有同样的运气。你能给我你提到的关于删除引号的部分的代码吗?我可能会以不同的方式误解它,并且我删除的任何引用都不起作用。另外,我不太确定如何做你提到的 debug.print 事情:p 我试过这个并得到同样的错误 - ;LIST= " & Sheet3.Range("d1") & " ;"以上是关于将单元格值提取到 SQL 查询中时 VBA 引发错误的主要内容,如果未能解决你的问题,请参考以下文章