ADODB查询的Excel工作表名称问题

时间:2018-09-03 10:17:18

标签: excel vba oledb

我一直在使用Excel 2013使用ADODB查询编写一些宏来从其他工作簿中检索数据。在测试某些情况下出现“无效包围”错误并且经过反复试验,我得出的结论是ADODB无法处理包含 点和空格 的工作表名称。换句话说:

XYZ S.à r.l. -12.2017  -> error   
XYZ S.à r.l -12.2017   -> works ok (dot before space is deleted)
XYZ S.à r.l.-12.2017   -> works ok (space after dot is deleted)

当然,在查询中,工作表名称由反引号代替:-)
错误msg -2147217900是;名称'XYZS.àr.l.的无效括号。 -12.2017 $ A9:H49'

我的问题是:您知道我应该跟踪的其他任何类似问题吗?在任何地方都有记录吗?


更新:生成的SQL语句(但是同样,它已经在其他许多工作簿中成功进行了测试,我设法通过重命名上述2个工作表中的第1个来使其工作)

select cstr(pr.reference), pr.[name],null, pr.item, pr.country, pr.currency, pr.maturity, pr.sector 
 from [Excel 12.0 Xml;HDR=Yes;Database=\\mydomain.com\someLongPath\XYZ S.à r.l. - 12.2017 - reviewed - MACRO TESTING.xlsx].`XYZ S.à r.l. -12.2017$A9:H49` pr
 where  cstr(pr.reference) not in (select cur.reference from [Excel 12.0 Xml;HDR=Yes;Database=\\mydomain.com\someLongPath\KB Sarl - 01.2018 to 03.2018 - MACRO TESTING.xlsx].`TB - 03.2018$A9:H51`cur ) 
 and pr.item is not null

此查询从“上一个”列表中获取数据,而“当前”列表中没有“参考”。上一个列表和当前列表通常在不同的工作簿中。

2 个答案:

答案 0 :(得分:0)

只需结束这个问题:

我得出的结论是ADODB无法处理包含点号和空格(“ .”)的工作表名称。
因此,我为此添加了一张支票。

答案 1 :(得分:0)

我处理了一个完全相同的问题。一种可行的解决方案是用. + Space 代替#中的TableName=Replace(Tablename,". ","# ") + Space 。显然#对于Access来说已经足够了。这个建议来自from here