Excel VBA 导出到 Access:ADO 错误
Posted
技术标签:
【中文标题】Excel VBA 导出到 Access:ADO 错误【英文标题】:Excel VBA Export to Access: ADO Error 【发布时间】:2016-09-02 15:10:06 【问题描述】:我正在尝试将工作表导出到 Access 中,并将其粘贴到现有表中。我引用了this post、this other post、and this other post。我收到一个错误,其中任何一个都没有解决,我认为这可能与 VBA 库有关,但可能完全不同。这是我的代码:
Sub ExcelToAccessAdo()
Dim cn As ADODB.Connection, rs As ADODB.Recordset, row As Long
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _
"Data Source=filepath\AccessDB.accdb;" 'this is a different filepath from the real one.
' open a recordset
Set rs = New ADODB.Recordset
rs.Open "Table Export", cn, adOpenKeyset, adLockOptimistic, adCmdTable
row = 2 ' the start row in the worksheet
Do While Not IsEmpty(Worksheets("Table Export").Range("A" & row))
With rs
.AddNew ' create a new record
.Fields("REPTNO") = Worksheets("Table Export").Range("A" & row).Value
.Update
End With
row = row + 1
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
工作表名称和 Access 表名称相同。此外,.Fields("REPTNO")
行直接来自其他人的帖子,所以我不知道是否必须更改它。
错误是Run-time error '-2147217900 (80040e14)': Syntax error in FROM clause.
在线rs.Open "Table Export", cn, adOpenKeyset, adLockOptimistic, adCmdTable
。
这是一个奇怪的错误,因为它看起来像是我在运行 SQL 时遇到的错误,但我假设在 INSERT INTO
子句中发生了一些后台 SQL。这可能是 Excel 的某种类型的文件路径问题?有什么帮助吗?
这是我的图书馆参考资料:
Microsoft Excel 14.0 对象库 OLE 自动化 Microsoft Office 14.0 对象库 Microsoft Forms 2.0 对象库 Microsoft ActiveX 数据对象 6.1 库 Microsoft ActiveX 数据对象 Recordset 6.0 库【问题讨论】:
我猜你应该在rs.open
语句中的表名周围加上一些方括号。我对此不是 100% 确定的,因为我通常只通过rs.open
发出 sql 语句。试一试:rs.Open "[Table Export]", cn, adOpenKeyset, adLockOptimistic, adCmdTable
看看它是否有效。
是的,做到了!我觉得我应该知道这样做......你想提交答案,我会标记它是正确的,还是应该?
【参考方案1】:
感谢@JNevill 指出我只需要使用方括号:
rs.Open "[Table Export]", cn, adOpenKeyset, adLockOptimistic, adCmdTable
【讨论】:
事实上,任何带有空格/特殊字符的表名都应该用括号括起来(并且作为最佳实践——不要在表名或字段名中包含特殊字符或空格)。此外,使用reserved words 的表名应使用括号。【参考方案2】:尽量远离任何对象名称(表格、字段名称、表单、报告等)中的空格。你可以这样做,但正如你所知道的,这将导致更多的时间和不必要的挫折来使事情正常化。另外,不要在代码中使用保留字。
https://support.microsoft.com/en-us/kb/286335
【讨论】:
以上是关于Excel VBA 导出到 Access:ADO 错误的主要内容,如果未能解决你的问题,请参考以下文章
将 Access VBA 记录集导出到 Excel 中的单行
使用VBA将VBA模块从Access项目导出到Excel项目