自动将不同的 Excel 文件导入 MS Access 2010 表

Posted

技术标签:

【中文标题】自动将不同的 Excel 文件导入 MS Access 2010 表【英文标题】:Import different excel files into MS Access 2010 tables automatically 【发布时间】:2014-02-05 13:20:50 【问题描述】:

我想将某个目录中的所有 Excel 文件(具有不同的数据和列)导入 MS Access 2010 数据库,为每个文件创建新表。我找到了将文件导入一个表的代码:

Option Compare Database
Option Explicit

Function DoImport() 

Dim strPathFile As String, strFile As String, strPath As String
 Dim strTable As String
 Dim blnHasFieldNames As Boolean

 ' Change this next line to True if the first row in EXCEL worksheet
 ' has field names
 blnHasFieldNames = True

 ' Replace C:\Documents\ with the real path to the folder that
 ' contains the EXCEL files
 strPath = "C:\Documents and Settings\myName\My Documents\Access Test\"

 ' Replace tablename with the real name of the table into which
 ' the data are to be imported
 strTable = "tablename"

 strFile = Dir(strPath & "*.xls")
 Do While Len(strFile) > 0
       strPathFile = strPath & strFile
       DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
             strTable, strPathFile, blnHasFieldNames

 ' Uncomment out the next code step if you want to delete the
 ' EXCEL file after it's been imported
 '       Kill strPathFile

       strFile = Dir()
 Loop

End Function

但我每次都需要创建新表。在 VBA 中可以吗?

【问题讨论】:

re: “如果有人能提供有关创建按钮、模块和运行的逐步示例,我将非常感激。” - 哇。如果那不是“太宽泛”,我不知道 是什么 我在网上冲浪的时间已经够久了,但还没有找到关于如何创建按钮并将其与模块链接的示例。我相信很快就会给出一个快速指南。无论如何,我的主要问题是在循环中创建新表。 您希望如何命名新表? @HansUp,根据文件名。 【参考方案1】:

我认为您需要做的就是在每次执行DoCmd.TransferSpreadsheet 之前更改目标表名称(strTable 的值)。

您在评论中说您希望从工作簿文件名派生表名。而且,每次通过您的循环,另一个变量 (strFile) 包含文件名。所以我认为您可以从该文件名中去除文件扩展名并将其用作 Access 表名。

这是一个即时窗口示例,演示了如何做到这一点...

strFile = "foo.xls"
strTable = Left(strFile, Len(strFile) - 4)
? strTable
foo

如果该方法合适,请修改 VBA 代码中的循环,如下所示(未经测试)代码 sn-p ...

strFile = Dir(strPath & "*.xls")
Do While Len(strFile) > 0
    strPathFile = strPath & strFile
    strTable = Left(strFile, Len(strFile) - 4)
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
        strTable, strPathFile, blnHasFieldNames
    strFile = Dir()
Loop

【讨论】:

正是我想要的,如此简单。非常感谢!【参考方案2】:

我以前是MOS Access 2003的,现在大家都在用2010但是很多东西没变。

当您进行手动导入或导出时,您可以将布局另存为规范。

这个过程可以通过宏来自动化。

查看下面的链接了解更多详细信息和步骤。

http://office.microsoft.com/en-us/access-help/run-a-saved-import-or-export-operation-HA001226020.aspx?CTT=5&origin=HA001226307

至于其他东西,按钮,模块等,请先阅读在线帮助/文档。

我们在这里为您提供帮助,但不是为您完成工作。

J

【讨论】:

好的,编辑我的问题听起来不那么顺从 :) 谢谢你的链接,但仍然有一种方法可以导入单个文件,覆盖同一个表。【参考方案3】:

好的,我不知道这是否是我的计算机不在当前办公室 CU 上的问题。

http://msdn.microsoft.com/en-us/library/office/ff192475(v=office.14).aspx

这里是如何使用 ImportExport 宏的链接。用于在宏部分。

我确实读到您必须信任该位置。所以我尝试了我的位置 c:\msdn 以及向导的默认位置。

仍然无法让选项出现。

我尝试创建一个规范,看看是否需要一个规范来显示选项,没有骰子。

但是,有一个 DoCmd.TransferText 和 DoCmd.TransferSpreadSheet。

两者都允许您导入。

创建一个函数。从宏 (RunCode) 调用函数。另一种方法是创建一个主菜单表单。有一个按钮。在 click 命令上,运行代码。

请告诉我您是否曾经显示 ImportExportData 宏。我认为这是一个错误。我需要关闭最新的累积更新并重试。

【讨论】:

我从宏调用我的函数,它工作正常,谢谢你的帮助!

以上是关于自动将不同的 Excel 文件导入 MS Access 2010 表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用sql语句和vba将数据从MS-Access导入excel power查询?

使用VB将数据从Excel导入Ms Access

从不同的 Excel 工作表自动导入 SQL 表

找一个可以将excel表格文件数据自动录入填写到其他办公系统的软件?

将 excel、openoffice 和 ms office 2007 数据导入到 rails 中的 db

将 MS Excel 链接到 MS Access 查询