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 数据库引擎找不到输入表或查询