Access 数据库引擎找不到对象 - 对象是 Excel 命名范围

Posted

技术标签:

【中文标题】Access 数据库引擎找不到对象 - 对象是 Excel 命名范围【英文标题】:Access Database Engine could not find object - object is Excel named range 【发布时间】:2016-03-23 15:30:15 【问题描述】:

这让我一直在兜圈子,基本上我想做的就是将 Excel 动态范围的值插入到 Access 表中。

例如,我通过引用范围成功地做到了这一点,但是为了使事情更加自给自足,我更喜欢使用动态范围。

我的代码如下:

Sub ExportDistDatatoSql()

Dim cn As ADODB.Connection
Dim STRQUERY As String

Set cn = New ADODB.Connection

With cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=" & ThisWorkbook.Path & "\uMyDB.accdb;"
.Open
End With

ssql = "INSERT INTO Crude_Prods_DB Select * from [Excel 12.0;HDR=YES;DATABASE=C:\TEST\mysheet.xlsm].[n_range]"

cn.Execute ssql

End Sub

我看到的错误已附加,我检查了工作簿中确实存在 [n_range]。

[尝试将数据从 excel 命名范围插入访问表时出现错误]

任何建议将不胜感激。

【问题讨论】:

我们不需要看错误信息的截图。当您遇到该错误时,进入调试模式,并将突出显示的文本作为一行粘贴到“立即”窗口中,然后在该行的末尾按 Enter:Debug.Print err.Number; err.Description 您可以从 Debug.Print 复制输出并将其粘贴到您的问题。 ...或 Ctrl+C 通常会将消息框的文本复制到剪贴板 【参考方案1】:

我很难学到这一点。 动态范围 仅在 Excel 运行时解析,因此当您读取文件时它不存在。

Access 只能读取已保存且固定的命名范围。

【讨论】:

感谢您的回复,我还有其他一些问题。首先,如果上面的代码是从 excel 执行的,即 excel 是打开的,那么动态范围肯定会得到解决吗?除非我完全误解了这一点。其次,如果我将命名范围更改为静态命名范围,我仍然会看到相同的错误消息。我想我正在慢慢得出结论,最好还是坚持按列和行引用范围。 它应该适用于静态范围。但也许它不喜欢文件已经打开?您可以从另一个(关闭的)文件导入吗?此外,在我看来,您越过小溪取水 ...为什么不循环范围并将值添加到记录集?

以上是关于Access 数据库引擎找不到对象 - 对象是 Excel 命名范围的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Access 数据库引擎找不到输入表或查询

报错sql读取excel 时 microsoft jet 数据库引擎找不到对象"demo1",请确保对象存在。

急,access找不到存在的数据表

在 Access 中创建 Outlook 收件箱电子邮件表

里正数据库引擎找不到

CoreData - fetch 找不到对象