将多个Excel文档链接到Access DB

时间:2015-09-21 19:45:03

标签: sql excel vba ms-access

我有大约200个Excel工作簿,每个工作簿都有一个唯一的名称,在它自己的文件夹中,类似C:\docs\daily\XXXX\XXXX_Daily_Report_20150920.xls,其中XXXX只是一个字母数字标识符,日期显然只是今天的日期。 我需要每天从所有200多个Excel工作簿中获取一个单元格(相同的单元格,“I2”)。

我知道你可以将Excel工作簿链接到Access,但是我无法想办法让它每天链接到不同的工作簿,我想知道是否有一个查询来简单地获取那个单元而不是链接整个Excel工作簿。

现在我有Excel VBA打开每个Excel文件并将其复制并粘贴到我的工作簿中相应的行/列中...但是因为它执行了200多次我想知道Access是否会有更快的解决方案。

有没有办法在Access中编写一个查询/宏来链接每天的新报告中的单元格I2(所以明天将是“XXXX每日报告20150921.xls”)并且只需在第一个表格中填入XXXX列和第二个I2的值?

1 个答案:

答案 0 :(得分:0)

Function import()

source_date = InputBox("date (yyyymmdd)")
Set db = CurrentDb()
db.Execute ("delete * from [DailyData]")

Set app = CreateObject("Excel.Application")

Set FSO = CreateObject("Scripting.FileSystemObject")
Set folder_list = FSO.GetFolder("C:\docs\daily").subfolders
For Each Fldr In folder_list
    Source = Fldr.Name
    SourceFile = "c:\docs\daily\" & Source & "\" & Source & "_daily_reports_" & source_date & ".xlsm"
    Set WB = app.workbooks.Open(SourceFile)
    amount = WB.sheets("sheet1").range("I2").Value
    SQL = "Insert into [DailyData] (source, amount) select '" & Source & "'," & amount
    db.Execute (SQL)
    WB.Close
    Next Fldr

MsgBox ("done")

End Function

这将获取特定日期的所有文件,并将输入放入名为DailyData的表中,其中包含Source和Amount字段。

注意 - 修改9/22以消除内部循环和If块 - 这假设每个文件夹都有一个文件用于当天的更新。如果没有,您可能需要在尝试打开文件之前验证该文件是否存在。