Sql 从excel检索ADODB数据,打开工作簿时无法识别工作表范围的NamedRange

Sql 从excel检索ADODB数据,打开工作簿时无法识别工作表范围的NamedRange,sql,excel,vba,ms-access,adodb,Sql,Excel,Vba,Ms Access,Adodb,我正试图从几个EXCEL中提取数据到Access数据库中。所有代码都是用Access编写的。每个excel都有一到大约10张数据表。他们被安排在一张桌子里。每个有数据的区域都有工作表范围的NamedRange,因此所有工作表的NamedRange都是相同的(相同的名称,通常范围相同,但名称很重要),只是范围不同而已 我确实使用ADODB连接。我遇到的问题是,当工作簿打开时(例如,由其他用户打开),它将无法识别工作表范围NamedRange 连接: adocnn.Open "Provider=M

我正试图从几个EXCEL中提取数据到Access数据库中。所有代码都是用Access编写的。每个excel都有一到大约10张数据表。他们被安排在一张桌子里。每个有数据的区域都有工作表范围的NamedRange,因此所有工作表的NamedRange都是相同的(相同的名称,通常范围相同,但名称很重要),只是范围不同而已

我确实使用ADODB连接。我遇到的问题是,当工作簿打开时(例如,由其他用户打开),它将无法识别工作表范围NamedRange

连接:

 adocnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FilePath & FileName & ";Mode=Read;Extended Properties=""Excel 12.0 Xml;HDR=no; IMEX=3;"";"
 adocnn.cursorlocation = adUseClient 'tested for both server/client
打开记录集:

sheetname = "CZ00904001" & "$"
namedrange = "Version"

adors.Open "SELECT * FROM [" & sheetname & namedrange & "]", adocnn, adOpenStatic, adLockReadOnly, adCmdText
因此
SELECT*FROM[CZ00904001$Version]
抛出运行时错误-2147217865“。数据库引擎找不到对象“CZ00904001$Version”…” 打开工作簿时发生此错误

如果关闭,则检索正确的数据

与工作簿范围相同

如果我使用单元格信息,比如
A1:B4
,即使打开工作簿,它也会检索到正确的信息,所以

sheetname = "CZ00904001" & "$"
namedrange = "A1:B4"

    adors.Open "SELECT * FROM [" & sheetname & namedrange & "]", adocnn, adOpenStatic, adLockReadOnly, adCmdText
所以语句
SELECT*FROM[CZ00904001$A1:B4]
检索数据

我正试图弄清楚如何编写它,这样它就可以通过使用命名范围来检索数据,而不管工作簿是打开的还是关闭的。 或者告诉我如何在不实际打开工作簿的情况下获取指定的范围地址

我还注意到

Set adors = adocnn.openschema(20)

    Do Until adors.EOF
        Debug.Print adors.Fields("Table_name")
        adors.MoveNext
    Loop
根据工作簿是打开还是关闭,返回不同数量的记录

谢谢你的帮助

编辑1:

所以我做了一些测试。我只在excel和源工作簿中创建了代码

事实证明,问题出在图纸的命名范围内。我在测试源工作簿中有两张工作表。一张图纸名为CZ00904002,另一张图纸名为CZ90904002

adors.Open "SELECT * FROM[CZ00904002$test];",adocnn,adOpenStatic,adLockReadOnly, adCmdText
打开工作簿时抛出提到的错误,但

adors.Open "SELECT * FROM [CZ90904002$test];", adocnn, adOpenStatic, adLockReadOnly, adCmdText
返回我要找的内容

我尝试了几种不同的引语组合,但到目前为止运气不好

CZ01904002工程 CZ10904002工程

似乎是CZ00的开始导致了这个错误


感谢您对如何更改SQL部分以使其正常工作提出建议。到目前为止的技巧包括打开工作簿,或者复制,在我看来,现在还不够优雅。最后一种方法

可能允许您将命名范围转换为地址这也可能发生在不同的文件中,或者您是否希望从Access导入Excel。由于您是从excel文件获取数据,只需复制excel文件(无论文件是否打开,都不会失败),然后打开复制的文件或使用它们输入数据,完成后删除复制的文件