链接72个工作表,从12个excel工作簿到MSACCESS

时间:2016-12-02 16:24:44

标签: excel vba excel-vba

我有12个月的每月快照报告。 事实证明,昂贵的人力资源数据库并未设置为保留历史数据,而只是以最新的方式写入大量员工数据。

我可以使用每月快照重建和查询此记录,但是有很多内容可以导入访问,并且必须有自动化。

我有6张名为PermTempsStartersPStartersLeaversTLeavers的工作表。 我有12个名为12_OCT_1611_SEP_1610_AUG_16等的工作簿等。 (实际上有67本工作簿,但步骤很少)

我已将所有Excel文件放入文件夹中。 (h:\reports\cleaned\

所以我需要把每张纸都变成自己的桌子。 (有10,000名员工,所以我把它们全部放在一张桌子里)

这些表在导入时需要某种命名约定。

因此,如果我从[Sheet Name]中的所有.xlsm文件中链接[Directory] 我可以根据源表名称和文件名命名它创建的表吗?

如果我可以做到这一点,那么我可以只更改工作表参数6次。

我只有MS OFFICE和一台i5笔记本电脑。

非常感谢任何帮助,建议和指导。

由于

1 个答案:

答案 0 :(得分:1)

在MS Access'DoCmd.TransferSpreadsheet方法中,只需为表名参数指定一个不存在的数据库表名,该方法应在数据库中创建这样的表。如果指定现有表,则方法将尝试按照当前结构追加到它:

newtblName = WorbookNameVar & WorksheetNameVar
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, _
      newtblName, WorkbookPathVar, True, WorbookSheetVar & "!"

但正如评论中所述,请考虑使用一个表并提供一些指标来区分差异,例如工作簿/工作表名称。首先导入一个Excel文件,然后为SourceLocation添加一个列(表/设计视图)作为短文本数据类型。然后遍历所有其他Excel文件:

' ACCESS METHOD
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, _
      ExcelImportTable, WorbookPathVar, True, WorbookSheetVar & "!"

' SQL ACTION QUERY
CurrentDb.Execute "UPDATE TABLE ExcelImportTable SET SourceLocation = '" _
                     & WorbookNameVar & WorksheetNameVar & "'"

请注意:这一切都假设Excel数据采用表格格式,从行A1开始,带有列标题。