文件是只读使用VBA Excel与ADO连接到Access

时间:2013-07-18 18:19:52

标签: excel vba ms-access ado

我正在尝试编写一个将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

2 个答案:

答案 0 :(得分:1)

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

  • 将工作表复制到新工作簿,关闭并保存,传输数据,然后使用Kill删除此(临时)文件
  • 创建一个ADO记录集并遍历工作表数据,将其插入(AddNew)Access表。有很多这方面的例子可以在互联网上找到。

答案 1 :(得分:0)

我有一个类似的问题。奇怪的是,这是因为我要么必须在Excel文件中使用与MS Access数据库相同的字段名称,要么在SQL字符串中指定字段。与此post中提到的类似。