帮我优化以下代码,实现直接将文件夹里面的EXECl文件一次性导入,并且判断推送清单汇总表中字段:通话日期,判断是否存在重复数据,如有则跳过该文件,进行下一文件导入。DoCmd.TransferSpreadsheet acImport, 10, "推送清单汇总", Forms!操作窗口!导入路径, True, ""
时间: 2024-03-16 16:42:45 浏览: 50
以下是优化后的代码,可以一次性将文件夹中的所有Excel文件导入,并且判断推送清单汇总表中字段“通话日期”是否存在重复数据,如有则跳过该文件,进行下一个文件导入:
```
Sub ImportExcelFiles()
Dim strPath As String
Dim strFile As String
Dim strFullPath As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
Dim dt As Date
strPath = Forms!操作窗口!导入路径 '获取文件夹路径
strFile = Dir(strPath & "\*.xlsx") '获取文件夹中的所有Excel文件
Set db = CurrentDb()
Do While Len(strFile) > 0
strFullPath = strPath & "\" & strFile '获取文件的完整路径
'判断该文件中的通话日期是否存在重复数据
strSQL = "SELECT COUNT(*) FROM [推送清单汇总] WHERE [通话日期] IN (SELECT [通话日期] FROM [Excel 12.0 Xml;HDR=YES;IMEX=1;ACCDB=YES;DATABASE=" & strFullPath & "].[Sheet1$])"
Set rs = db.OpenRecordset(strSQL)
If rs.Fields(0).Value > 0 Then '存在重复数据,跳过该文件
rs.Close
Set rs = Nothing
strFile = Dir '获取下一个Excel文件
Continue Do
End If
rs.Close
Set rs = Nothing
'导入Excel文件
DoCmd.TransferSpreadsheet acImport, 10, "推送清单汇总", strFullPath, True
strFile = Dir '获取下一个Excel文件
Loop
Set db = Nothing
End Sub
```
这段代码在原有的基础上增加了以下部分:
- 使用 DAO 对象打开当前数据库,便于后续查询操作;
- 使用 SQL 语句查询推送清单汇总表中是否存在重复数据,其中使用了“SELECT IN SELECT”子查询,将 Excel 文件中的通话日期与推送清单汇总表中的通话日期进行比较;
- 如果存在重复数据,使用 `Continue Do` 跳过当前文件,处理下一个文件;
- 如果不存在重复数据,使用 `DoCmd.TransferSpreadsheet` 函数导入该文件中的数据。
这样,就可以实现一次性导入文件夹中的所有Excel文件,并且判断推送清单汇总表中的通话日期是否存在重复数据的功能。
阅读全文