如何仅使用现有 VBA 代码将新文件导入 Access DB
Posted
技术标签:
【中文标题】如何仅使用现有 VBA 代码将新文件导入 Access DB【英文标题】:How to only import new files to Access DB with existing VBA code 【发布时间】: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 文件。 你说得很对,我可能把这复杂化了。感谢您的回复。 【参考方案1】:您需要使用带有周数的 if 子句,试试下面的代码,它未经测试
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 <> ""
'Add This Line
if Format(Mid(strfile, 14, 10), "ww") = format(date(), "ww") -1 then
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
'and this one
end if
strFile = Dir()
Wend
End Function
【讨论】:
以上是关于如何仅使用现有 VBA 代码将新文件导入 Access DB的主要内容,如果未能解决你的问题,请参考以下文章