如何使用Excel VBA将Excel XLS转换为Access MDB

时间:2010-10-28 17:27:38

标签: database excel ms-access vba

我需要使用Excel中的VBA来加载访问中的Excel工作簿并将其传输到数据库。

Dim acc As New Access.Application
acc.OpenCurrentDatabase "C:\Test.xls"

我到目前为止,Excel崩溃并且必须重新启动。我的计划是使用以下内容,但我无法做到这一点。

acc.DoCmd.TransferDatabase

有什么想法吗?我用谷歌搜索了几天,什么都没有。

*编辑:感谢您的答复到目前为止,我不得不使用Excel VBA。有一个excel电子表格,其中有一堆空列被Jet引擎识别为已定义的列,实际上太多了> 255(或者> 256?)。我不想出于任何原因打开Excel工作表(这在网络上花了太长时间)。我没有选项或选择正确格式化或清理它。如你所愿,很容易将XLS电子表格转换为访问内部的MDB数据库,但这不是一个选项。就像我说的,我需要在Excel中使用VBA来操作访问对象以将XLS工作簿转换为MDB数据库;有了这个,剩下的就是蛋糕了。非常感谢!我喜欢这个网站。

2 个答案:

答案 0 :(得分:1)

如果您能够在Microsoft Access中使用VBA,则此任务很简单; e.g:

DoCmd.TransferSpreadsheet , , _
"tblImportFromExcel","C:\path\to\myfile.xls", True, "A1:B200"

TransferSpreadsheet documentation

答案 1 :(得分:0)

Adam Bernier建议的解决方案有什么问题(PowerUser增加了关于在Excel中使用访问对象的问题);你最后的评论是在那些建议之后,你没有回复。

Dim acc As New Access.Application
acc.OpenCurrentDatabase "C:\Test.mdb"

acc.DoCmd.TransferSpreadsheet _
    TransferType:=acImport, _
    Spreadsheettype:=acSpreadsheetTypeExcel8, _
    TableName:="tblImportFromExcel", _
    Filename:="C:\path\to\myfile.xls", _
    HasFieldNames:=True, _
    Range:="A1:B200"

(根据需要进行调整,尤其是HasFieldNames和Range)。如果这不起作用,那么Excel表格可能出现了问题。

我能想到的唯一另一件事(但这意味着打开文件)是将Excel工作表保存为XML并通过XSLT以更合适的格式转换值,然后导入生成的XML。但这可能是过度的(你的文件有多复杂,你需要多久进行一次导入)。

HTH 安德烈亚斯