以下是我的代码:
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。但我注意到我们的报告总是包括当前月份和上个月,即使报告的日期为当月。每个文件名的格式为Report - YYYYMM。我想到的想法是查看文件名的YYYYMM部分,只抓取相应日期的数据。
以下编辑和添加
Actuarial_Report-201705
Enrollment_Report-201705
Premium-Data-201705
上述每个报告都包含5月和4月的信息。但前几个月的报告显然将包括4月份和3月份的数据,依此类推。发生的事情是,我导入的所有数据都计入了两次登记,保费和精算信息。我想只从201705报告中提取201705数据,并让代码忽略201704信息。
答案 0 :(得分: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注入的风险。