2015-09-21 73 views
1

我有〜200 Excel工作簿每一个独特的名字,在自己的文件夹,像C:\docs\daily\XXXX\XXXX_Daily_Report_20150920.xls,其中XXXX仅仅是一个字母标识符和日期显然只是今天的日期。 我需要从每天的所有200多个Excel工作簿中获取一个单元格(同一单元格,“I2”)。链接多个Excel文档到Access数据库

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

现在我有Excel VBA打开每个Excel文件并将其复制并粘贴到我的工作簿中相应的行/列中......但是由于它执行了这200次以上的操作,我想知道Access是否会有更快解。

有没有什么办法可以在Access中编写查询/宏,将链接每天的新报告中的单元格I2(因此明天将是“XXXX Daily Report 20150921.xls”),并在XXXX中填充表格第一列和I2的值在第二个?

+1

如果您发现我的答案有帮助,请告诉我 - 如果它对您有用,请接受答案。如果不是您所需的,请添加评论,我可能会澄清答案。谢谢。 –

回答

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,消除内部循环,如果块 - 这是假定每个文件夹都会有当天的更新文件。如果不是,您可能需要在尝试打开文件之前验证该文件是否存在。

相关问题