2015-09-21 21 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,消除內部循環,如果塊 - 這是假定每個文件夾都會有當天的更新文件。如果不是,您可能需要在嘗試打開文件之前驗證該文件是否存在。

相關問題