2015-08-24 1 views
2

Позвольте мне извиниться заранее, если этот вопрос задан где-то, и я его не заметил. Я потратил несколько дней на это и не могу заставить его работать на 100%.Импорт ежедневного файла с именем переменной в базу данных доступа

Я пытаюсь импортировать файл Excel, который отправляется по электронной почте каждое утро в базу данных доступа. В файле есть дата, которая меняется каждый день. Именование происходит по той же схеме каждый день «FTTQ m-dd-yyyy». День, указанный в имени файла, относится к предыдущему рабочему дню, например. получать по электронной почте 8/25 для FTTQ 8/24. Код ниже - это то, что у меня есть до сих пор, и оно будет проходить через папку, однако, когда он достигнет правильного дня, он не сможет его найти. Я пробовал пару вариантов, но 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 

ответ

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 
+0

Я пробовал это, и когда он работал, я получил Runtime Error 3170: Не удалось найти устанавливаемый ISAM –

+0

Что произойдет, если вы удалите запятую из 'DoCmd.TransferSpreadsheet' и' acImport'? – HansUp

+0

Я удалил его и теперь получил ошибку несоответствия типа в этой строке: «DoCmd.TransferSpreadsheet acImport», «tblTest», strFilePath, True' и «DoCmd.TransferSpreadsheet acImport», «tblTest», strFile, True'. –

1

*** Я предполагаю, что у вас есть закрытие "в вашей strFilePath линии в реальном коде. ****

Эта линия выглядит вопрос ...

strFile = Dir(strFilePath, "*.xlsx")

Эта страница покажет вам правильный синтаксис для использования Dir ... http://www.techonthenet.com/excel/formulas/dir.php

strFile = Dir(strFilePath & "*.xlsx") < - вы помещали расширение файла туда, куда должны были идти атрибуты.

Однако вам также необходимо изменить дату. Если файл будет иметь вчерашнюю дату, а не сегодняшние ... strToday = Format(Date-1, "m-dd-yyyy")

Эту линия ... strFile = Dir

устанавливает вашу строку к следующему имени файла, которое соответствует вашим критериям поиска.

+0

Как бы объяснить приходить в понедельник и найти файл на 2-3 дня назад? Хотя да, что будет работать для поиска вчера, никогда не будет файла, который будет сохранен с воскресной датой, в этом случае 8/23. Мне нужно было бы найти 8/21 или 8/22. –

+0

Я исправил ошибку и внес изменения, но получаю ту же ошибку времени выполнения, что и с другим ответом. Ошибка выполнения 3170: Не удалось найти устанавливаемый ISAM –

+0

@ColeStratton. Объясните, какая логика Access может использовать, чтобы узнать, следует ли проверять имя файла, которое содержит вчерашнюю дату или другую более раннюю дату. Также возможно, что ваша процедура * Button1_Click * может быть запущена дважды в тот же день? Если да, то что тогда должно произойти? – HansUp

Смежные вопросы