我正在尝试使用INSERT INTO命令将数据从excel 2010文件写入Access 2007文件。数据包含在Tool_Selector.xlsm excel文件的“NewProj”工作表中,需要将其写入“Tool_Database.mdb”文件,但遗憾的是我收到了几个不同的错误。这就是我目前所拥有的
Sub AddData()
Dim Cn As ADODB.Connection
Set Cn = New ADODB.Connection
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Tools_Dev\_Tool_Selector\Tool_Selector.xlsm;Extended Properties=Excel 8.0;" _
& "Persist Security Info=False"
Cn.Execute "INSERT INTO Project_Names IN 'D:\Tool_Database\Tool_Database.mdb' SELECT * FROM Worksheets("NewProj").Range("A2").Value"
Cn.Close
Set Cn = Nothing
End Sub
我从这个帖子中获取了代码:Insert Data from Excel into Access using VBA
我只需要传输单个细胞的值。
感谢。
答案 0 :(得分:2)
问题是您在SQL语句中使用VBA代码。以下行将编译但在执行时失败:
Cn.Execute "INSERT INTO Project_Names IN 'D:\Tool_Database\Tool_Database.mdb' SELECT * FROM Worksheets("NewProj").Range("A2").Value"
它失败,因为当您使用Worksheets(),. Randge和.Value的VBA函数时,您仍然在SELECT语句中。 IIRC,您应该能够使用SQL语法从工作表中选择特定范围。适当的语法应该是:
"SELECT * FROM [Sheet$]"
如果您想要特定范围,那么您可以尝试:
"SELECT * FROM [Sheet$A1:C20]"
如果您正在寻找有关在Excel中使用ADO的更多信息,请参阅Microsoft http://support.microsoft.com/kb/257819上的一篇文章。 Scripting Guys还写了一篇不错的文章,帮助我在几年前了解它:http://technet.microsoft.com/en-us/library/ee692882.aspx。
希望这可以帮助您解决问题。但是,我会留言给你一个警告。我记得在我第一次使用此代码时查询已打开的Excel电子表格时遇到了一些非常奇怪的问题。如果我查询已经打开的Excel电子表格,那么我会遇到一个问题,即内存将被泄露,Excel最终会耗尽内存使用。解决问题的唯一方法是完全关闭Excel。 ADO引用是否正确关闭/清除也无关紧要。
事实上,我只是用Google搜索它来仔细检查,这是一篇关于错误的文章:http://support.microsoft.com/default.aspx?scid=kb;en-us;319998&Product=xlw。
答案 1 :(得分:0)
这听起来类似于我从办公室2003升级到2007年时遇到的问题。
我的解决方案是更改连接字符串中的提供程序。由于您使用的是现代办公版本,我认为它应该是:
Provider=Microsoft.Ace.OLEDB.12.0;
您可能也想查看该Extended属性。我知道Excel 8.0是一个Excel '97文件。 Excel 2010是14.0