2017-08-31 31 views
0

進口數據會議某些標準這下面的代碼,我有:VBA來自所有電子表格中的一個目錄

Public Function Import_Multi_Excel_Files() 

Dim InputFile As String 
Dim InputPath As String 

InputPath = "L:\Directory\To\Project\Data\" 
InputFile = Dir(InputPath & "*.xls*") 
worksheetName = "WorksheetThatHasData!A:H" 

Do While InputFile <> "" 
    DoCmd.TransferSpreadsheet acImport, , "Table_1", InputPath & InputFile, -1, worksheetName, True '< The true is for column headers 
    InputFile = Dir 
Loop 

End Function 

上述代碼在每個工作簿中抓住所有的數據從一個特定的工作表(其是好)並將其導入MS Access。但是我注意到,儘管報告是針對當月的日期,但我們的報告始終包含當前月份和上個月。每個文件名都具有報告 - YYYYMM格式。我正在踢的想法是看文件名的YYYYMM部分,只抓取具有相應日期的數據。

編輯和增加以下

Actuarial_Report-201705
Enrollment_Report-201705
高級-DATA-201705

上面的每個報告包括從五月和四月的信息。但是前幾個月的報告將明確包括4月份以及3月份的數據等等。發生的情況是,我輸入的所有數據都計入了兩次註冊,保費和精算信息。我只想從201705年的報告中提取201705年的數據,並讓代碼忽略2017年的信息。

+0

請提供一些示例文件名(+擴展名)。此外,讓你的問題更加明確。在隔離月份和年份後,你想要做什麼? –

+0

你正在踢的想法是一個好主意。發佈您嘗試實現該想法的代碼,並簡要說明卡住的位置和錯誤行爲(例如錯誤消息)。 –

+0

@ErikvonAsmuth我向底部添加了我的問題。如果報告的文件名中包含201705年的日期,我只希望從2017-05年複製信息。文件名全部具有格式爲YYYYMM的日期,並且在工作簿中,列B具有格式爲YYYY-MM的日期。 – emka

回答

0

用以下替換您While循環:

Dim strMonth As String 
Dim strYear As String 
Do While InputFile <> "" 
    strMonth = Mid(InputFile, Len(InputFile) - 6, 2) 
    strYear = Mid(InputFile, Len(InputFile) - 10, 4) 
    DoCmd.TransferSpreadsheet acImport, , "Table_1", InputPath & InputFile, -1, worksheetName, True '< The true is for column headers 
    CurrentDb.Execute "DELETE * From Table_1 WHERE MyDateColumn < #" & strYear & "/" & strMonth & "/01#" 
    InputFile = Dir 
Loop 

哪裏MyDateColumn是存儲日期的列。

假設:你是不是存儲在Table_1要保留任何其他舊的信息,否則你將要導入到另一個表,刪除無效的日期信息,然後追加的數據Table_1

文件名的末尾不能改變,否則這會產生錯誤。

請注意,我沒有在查詢中使用參數,但由於字符串來自文件名,最大長度爲6,中間爲/,因此SQL注入的風險不存在。

+0

你所有的假設都是正確的。這個數據庫的目的是將一些單獨的信​​息合併成一個報告。由於我們越來越忙,並且需要更頻繁地報告,我最近纔開始將腳趾頭粘在vba的水中。 – emka

+0

我只是跑它。它似乎仍然是數字的兩倍。 – emka

+0

雙倍數字?它應該刪除某個日期之前的日期。我對加倍數字一無所知。提供您正在導入的表格的精確表格結構。 –

相關問題