【发布时间】:2016-07-21 12:06:34
【问题描述】:
我有一些 VBA 代码用于将 Excel 电子表格的特定列导入我的 Access 数据库。
导入数据库的文件在每个工作日生成,我计划在每周开始时运行导入过程。
我面临的问题是我当前的代码会导入目录中的每个电子表格,而不仅仅是前一周生成的新电子表格。正在导入的文件以以下格式命名:“FD Worksheet 01 07 2016”,日期部分是它的生成日期。在数据库中有一个名为“file_date”的字段,如下面的代码所示,这是将文件导入数据库时存储文件日期的位置,以便能够识别数据来自哪个文件。
有人可以帮我修改我的代码以仅导入数据库中缺少的电子表格吗? IE。先搜索数据库,检查文件是否之前被导入,如果是,忽略它?
非常感谢。
Option Compare Database
Public Function importExcelSheets()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim astrPieces() As String
Dim dteFileDate As Date
Dim strDir As String
Dim strFile As String
Dim strInsert As String
Dim Directory As String
Dim TableName As String
Directory = "F:\FD Worksheets\jul 2016"
TableName = "FD Worksheets"
Dim strTable As String
Dim I As Long
I = 0
If Right(Directory, 1) <> "\" Then
strDir = Directory & "\"
Else
strDir = Directory
End If
strFile = '" strFile = Dir(strDir & "*.XLSX")
While strFile <> ""
I = I + 1
Debug.Print "importing " & strFile
If Not strDir Like "*\" Then
strDir = strDir & "\"
End If
strInsert = "INSERT INTO [FD Worksheets] (file_date, Prod, Average_Cost, WSP)" & vbCrLf & _
"SELECT [which_date] as file_date, xl.Prod, xl.Average_Cost, xl.WSP" & vbCrLf & _
"FROM [Excel 12.0 Xml;HDR=YES;IMEX=2;DATABASE=" & strDir & strFile & "].[Sheet1$] AS xl;"
Debug.Print strInsert
astrPieces = Split(Left(strFile, Len(strFile) - 5), " ")
dteFileDate = DateSerial(Val(astrPieces(4)), astrPieces(3), astrPieces(2))
Debug.Print dteFileDate
Set db = CurrentDb
Set qdf = db.CreateQueryDef(vbNullString, strInsert)
qdf.Parameters("which_date").Value = dteFileDate
qdf.Execute dbFailOnError
strFile = Dir()
Wend
End Function
【问题讨论】:
-
在附加数据后将 XLSX 移动到存档文件夹不是更简单吗?然后下次运行此过程时,源文件夹将只包含尚未导入的 XLSX 文件。
-
你说得很对,我可能把这复杂化了。感谢您的回复。