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 将数据从 Excel 导出到 Access

MS Access导出联合查询到Excel,VBA问题

使用VBA将VBA模块从Access项目导出到Excel项目

Access VBA:将表导出到 Excel 2010 数据透视表

Excel VBA:将表数据导出到 Access。如果 2 个字段的主键已经存在,如何覆盖?