将单元格值提取到 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 引发错误的主要内容,如果未能解决你的问题,请参考以下文章

VBA 另存为 PDF 文件名作为单元格值

VBA 按钮 - 基于单元格值而不是 ActiveCell

从 Power Query 中的单元格值中提取数据类型?

Excel:使用单元格值作为 SQL 查询的参数

VBA:根据单元格值过滤数据透视表

使用 vba 中的单元格值保存动态文件