1

我正在尝试编写一个将 Excel 数据推送到 Access 中的宏。最初我只是简单地编写它以将 Access 作为对象打开并这样做,但是速度非常慢。所以现在我正在编写它以使用 ADO 连接。如果我从我所在的文件以外的任何文件写入,我可以让它工作,但是,因为这是一个功能区按钮并且只使用我所在的文件,我需要它来工作。下面是我的代码。我得到的错误是:

运行时错误 -2147217911 (80040e09) 无法更新。数据库或对象是只读的。

这很愚蠢,因为我没有更新 Excel 文件,但微软就是这样。有什么想法吗?

Transfers2 = ActiveWorkbook.FullName & "].[" & ActiveSheet.Name & "$]"
'C:\temp\ContractToolSetV2.xlsm].[Sheet1$]  - this would work, since it is not the file open

Dim con As Object ''Create ADODB Connection
Set con = CreateObject("ADODB.Connection")

SQLcmd = "Insert INTO tblExcelImportCT Select * FROM [Excel 12.0 Xml;Readonly=1;HDR=YES;IMEX=2;ACCDB=YES;DATABASE= " & Transfers2 

con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\nrpi.local\shared_files\ADCC\Commercial Auction Division\BA Support\BAmangment.accdb;"
con.Execute _
    SQLcmd
4

2 回答 2

1

是的,您收到此消息是因为文件已打开。你可以:

  • 将工作表复制到新工作簿,关闭并保存,传输数据,然后使用删除此(临时)文件Kill
  • 创建一个 ADO 记录集并遍历工作表数据,将其插入 ( AddNew) 到 Access 表中。在互联网上可以找到许多这样的例子。
于 2013-07-19T00:16:35.130 回答
0

我有一个类似的问题。奇怪的是,这是因为我必须在 Excel 文件中具有与 MS Access 数据库相同的字段名称,或者在 SQL 字符串中指定字段。类似于这篇文章中提到的内容。

于 2019-11-22T22:45:06.640 回答