我有大约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的值?
答案 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块 - 这假设每个文件夹都有一个文件用于当天的更新。如果没有,您可能需要在尝试打开文件之前验证该文件是否存在。