【发布时间】:2023-03-11 07:36:01
【问题描述】:
我有一个包含多个工作表的工作簿,每个工作表都有相同的一组命名范围(即,它们的范围仅限于工作表,而不是工作簿)。
我想根据任何工作表上的命名范围进行查询。有些工作表的名称不带空格,而另一些工作表的名称带空格。
我可以轻松地为没有空格的人执行此操作,但使用空格执行此操作的语法让我无法理解(以及一个小时的 google-ing)。
命名范围为“Ingredients”,一张名为“NoSpaces”,另一张名为“With Spaces”
这是适用于“NoSpaces”工作表的代码:
sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dictNewRecipesToCheck(arrKeys(0)) & ";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;"""
strQuery = "Select * from [NoSpaces$Ingredients]"
Set objConn = New ADODB.Connection
Set objRecordSet = New ADODB.Recordset
objConn.Open sConnString
objRecordSet.Open strQuery, objConn
我已经为“With Spaces”表尝试了以下所有方法:
strQuery = "Select * from [With Spaces$Ingredients]"
strQuery = "Select * from ['With Spaces'$Ingredients]"
strQuery = "Select * from ['With Spaces$'Ingredients]"
strQuery = "Select * from [With_Spaces$Ingredients]"
每次,我都会收到“Microsoft Access 数据库引擎找不到对象...”错误。
正如我所提到的,它适用于名称中没有空格的所有工作表。
任何帮助在带空格的工作表上工作,将不胜感激。
谢谢!
基于以下评论的更新:
Excel 2007
sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileLoc & ";Extended Properties=""Excel 12.0 Macro;HDR=No;IMEX=1;"""
运行@shahkalpesh 提供的架构代码时,它会将 TABLE_NAME 列为两个命名范围的“成分”(即使每个范围都限定在不同的工作表中)。
使用此驱动程序,即使 [NoSpaces$Ingredients] 也不起作用。
sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFileLoc & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""
当运行@shahkalpesh 提供的模式代码时,它会将 TABLE_NAME 列为“NoSpaces$Ingredients”和“'With Spaces'$Ingredients”。使用此驱动程序,[NoSpaces$Ingredients] 工作正常(ACE 驱动程序没有)。
但是,使用架构报告的确切名称,['With Spaces'$Ingredients] 不起作用。
Excel 2013
sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileLoc & ";Extended Properties=""Excel 12.0 Macro;HDR=No;IMEX=1;"""
当运行@shahkalpesh 提供的模式代码时,它会将 TABLE_NAME 列为“NoSpaces$Ingredients”和“'With Spaces$'Ingredients”。使用此驱动程序,[NoSpaces$Ingredients] 工作正常,但 ['With Spaces'$Ingredients] 不起作用。
最后,请参阅http://db.tt/3lEYm2g1 以获取在 Excel 2007 中创建的示例工作表,该工作表在(至少)2 台不同的机器上存在此问题。
【问题讨论】:
-
使用 Excel 2013 我通过引入常规范围(不是命名范围)并使用冒号(“:”)解决了这个问题。例如。
[Report 1$A15]不起作用,但[Report 1$A15:A15]起作用。
标签: sql excel named-ranges vba