2010-10-28 77 views
0

我需要使用Excel中的VBA在访问中加载Excel工作簿并将其传送到数据库。如何使用Excel VBA将Excel XLS转换为Access MDB

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数据库;一旦我有了,剩下的就是蛋糕。非常感谢!我喜欢这个网站。

+3

为什么你必须使用Excel来做到这一点?看来,Microsoft建议从Access加载Excel文件。 – bernie 2010-10-28 17:33:02

+2

这是一个打印错误acc.OpenCurrentDatabase“C:\ Test.xls”?当然,你的意思是acc.OpenCurrentDatabase“C:\ Test.'mdb'”? – Fionnuala 2010-10-28 19:26:44

+1

Brettville,欢迎来到StackOverflow。你能编辑你的问题,并给我们更多的细节?你能一步一步地告诉我们你想做什么吗?您是否试图将Excel工作表导入Access数据库? – PowerUser 2010-10-28 20:58:00

回答

1

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

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

TransferSpreadsheetdocumentation

+0

我同意这是最简单的,但不能让原来的海报只是制作和控制Excel中的Access对象? – PowerUser 2010-10-28 19:29:12

+0

@power:发表一个答案;如果有代码示例,我会赞成它! :-) – bernie 2010-10-28 19:31:29

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 安德烈亚斯

+0

它需要来自Excel内的Excel – DontFretBrett 2011-03-24 22:40:23

+0

@bretville,这是Excel中的_is_(尽管如果它来自例如Word,它并没有什么区别。只要确保在VBA中已经设置了对MS Access的引用你可以使用它的对象模型,你有没有试过这个例子? – 2011-05-25 09:52:06