我一直在使用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
此查询从“上一个”列表中获取数据,而“当前”列表中没有“参考”。上一个列表和当前列表通常在不同的工作簿中。
答案 0 :(得分:0)
只需结束这个问题:
我得出的结论是ADODB无法处理包含点号和空格(“ .
”)的工作表名称。
因此,我为此添加了一张支票。
答案 1 :(得分:0)
我处理了一个完全相同的问题。一种可行的解决方案是用.
+ Space 代替#
中的TableName=Replace(Tablename,". ","# ")
+ Space 。显然#
对于Access来说已经足够了。这个建议来自from here。