在 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) <> "" 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 代码?