如果这个问题已在某个地方提出并且我忽略了它,请提前道歉。我已经花了好几天时间而无法让它100%运行。
我正在尝试导入每天早上通过电子邮件发送到访问数据库的excel文件。该文件的日期部分每天都在变化。命名遵循“FTTQ m-dd-yyyy”每天的相同模式。文件名中显示的日期是前一个工作日,例如。 8/25收到8月24日的FTTQ电子邮件。下面的代码是我到目前为止,它将遍历文件夹,但是当它到达正确的一天时,它找不到它。我尝试了几个变种但Access在我尝试运行它时会一直崩溃。理想情况下,我需要Access来查找文件的最新日期并导入它,例如星期一进入并获取星期五/星期六的文件或在前一天获取文件。任何帮助将不胜感激。
Private Sub Button1_Click()
Dim strToday As String
Dim strFilePath as String
Dim strFile as String
strToday = Format(Date, "m-dd-yyyy")
strFilePath = "C:\Users\cole.stratton\Documents\Procurement\FTTQ 'Note:FTTQ is the beginning of the file name
strFile = Dir(strFilePath, "*.xlsx")
Do While strFile <> ""
If Right(strFile,14) = strToday & ".xlsx" Then
DoCmd.TransferSpreadsheet, acImport, "tblTest",strFile, True
End If
strFile = Dir 'Note: I do not understand the point of this line or what it does or supposed to do.
Loop
End Sub
答案 0 :(得分:2)
要查找最新的现有文件,我会改变这样的循环:
Dim searchDate As Date
Dim strDate As String
Dim strFilePath As String
Dim strFile As String
Dim i As Long
' Search backwards from today for a file with the date name
For i = 0 To -7 Step -1
searchDate = DateAdd("d", i, Date)
strDate = Format(searchDate, "m-dd-yyyy")
strFilePath = "C:\Users\cole.stratton\Documents\Procurement\FTTQ " & strDate & ".xlsx"
Debug.Print "Looking for: " & strFilePath
' Check if file exists
strFile = Dir(strFilePath)
If strFile <> "" Then
' Note that Dir() only returns the file name, so use strFilePath
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "tblTest", strFilePath, True
' file found, exit loop
Exit For
End If
Next i
答案 1 :(得分:1)
***我假设您在实际代码中的strFilePath行中已经关闭了。****
这一行看起来像问题......
strFile = Dir(strFilePath, "*.xlsx")
此页面将显示使用目录的正确语法... http://www.techonthenet.com/excel/formulas/dir.php
strFile = Dir(strFilePath & "*.xlsx")
&lt; - 您将文件扩展名放在属性所在的位置。
但是,您还需要更改日期。如果文件将有昨天的日期,而不是今天的... strToday = Format(Date-1, "m-dd-yyyy")
这一行......
strFile = Dir
将您的字符串设置为符合搜索条件的下一个文件名。