在 Access 中通过 VBA 传输表时出错

Posted

技术标签:

【中文标题】在 Access 中通过 VBA 传输表时出错【英文标题】:Error when transferring table via VBA in Access 【发布时间】:2021-12-13 15:23:35 【问题描述】:

当我运行它时,我得到运行时错误 3027:“无法更新。数据库或对象是只读的。”

Private Sub Export_Run()
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogSaveAs)
    
    If fd.Show = True Then
        If Format(fd.SelectedItems(1)) <> vbNullString Then
            DoCmd.TransferText acExportDelim, , "Export_tbl", fd.SelectedItems(1), False
        End If
    End If    
End Sub

我要导出的表 (Export_tbl) 存在并且是可编辑的(不是只读的),我可以手动导出它而不会出现问题。我猜这可能是我正在使用的机器的问题,有权限还是什么?还是我错误地使用了 filedialog 参考?感谢您的帮助。

【问题讨论】:

目标文件可能已打开,例如在 Excel 中。如果是这种情况,请关闭 Excel,您将能够导出。 @OlivierJacot-Descombes 好电话,我没有检查,但在这种情况下,这似乎不是问题...... 在导出前尝试删除文件:If Dir(FileToDelete) &lt;&gt; "" Then Kill FileToDelete End If. 【参考方案1】:

问题是我未能为要导出的表正确分配完整的文件名——您需要包括文件路径、名称和扩展名(至少在这种情况下,因为我正在尝试导出作为文本/CSV)。以下工作:

Private Sub Export_Run()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogSaveAs)

    If fd.Show = True Then
        If Format(fd.SelectedItems(1)) <> vbNullString Then
            thename = fd.SelectedItems(1) & ".csv"
            DoCmd.TransferText acExportDelim, , "Export_tbl", thename, False
        End If
    End If

End Sub

【讨论】:

以上是关于在 Access 中通过 VBA 传输表时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Microsoft Access 中通过 VBA 设置 INSERT SQL 查询的参数值?

在期望脚本中通过 ssh/telnet(甚至是 shell)传输二进制数据时出错

更新底层 SQL 表时如何在 Access 中触发 VBA 代码?

通过 excel VBA 加入 SQL 表时出错

尝试打开已链接到 Share Point with Access 2013 的表时,Access 2007 出错

将数据从pandas数据帧传输到IBM DB2表时出错