VBA MS ACCESS как открыть файлы, созданные в определенные временные рамки?

#vba #ms-access

Вопрос:

У меня есть несколько CSV-файлов, которые необходимо открыть и, по возможности, импортировать в одну таблицу… Критерием являются даты создания, т. е. открытые файлы, созданные в промежуток времени между выбранными датами. Ниже тестовый код, заимствованных из других постов и подправил его немного ,но упираются в вопросы код и не могу передать ошибку(ы): редактирование: если есть лучший/более быстрый способ, чтобы выполнить эту задачу, это будет воспринято с благодарностью, а также обновленный код ниже, без ошибок; тем не менее, ничего не происходит вообще, таблица не создается, файлы не импортируются… Большое вам спасибо за вашу помощь

 Dim oFile
Dim FSO As Object 'FileSystemObject
Set oFile = CreateObject("Scripting.FileSystemObject")
Dim Directory As String
Dim FileName As String
Dim varCellvalue As Long

Directory = "E:Op60"
If Right(Directory, 1) <> "" Then
   Directory = Directory amp; ""
End If

FileName = Dir(Directory amp; "*.CSV")

''''''''''''''''''''''''
Dim DateEarliest As Date
Dim EarliestDate As Date

EarliestDate = txt_Start_Date
DateEarliest = CDate(EarliestDate)

Dim DateLatest As Date
Dim LatestDate As Date

LatestDate = txt_Start_Date2
DateLatest = CDate(LatestDate)

 Do While FileName <> ""
 '**-*-*-*-*-*-*-*-*
 'Debug.Print oFile.getFile(Directory amp; FileName).DateCreated, EarliestDate, LatestDate
 '**************
 If oFile.getFile(Directory amp; FileName).DateCreated >= DateEarliest And oFile.getFile(Directory amp; FileName).DateCreated <= DateLatest Then
    DoCmd.TransferText TransferType:=acLinkDelim, TableName:="CsvTbl", FileName:=Directory amp; FileName, HasFieldNames:=True
End If
 
FileName = Dir

 Loop
 

Комментарии:

1. Application.ScreenUpdating предназначен для объекта приложения Excel. Использование доступа Application.Echo docs.microsoft.com/en-us/office/vba/api/access.application.echo

2. Что касается другой ошибки, каковы значения в EarliestDate LatestDate вашем задании и из него, я предполагаю, что они являются строковыми типами, и вы не можете выполнять арифметические сравнения между переменными типа строки и даты.

Ответ №1:

Вставьте строку для отладки ваших критериев:

 Debug.Print oFile.getFile(Directory amp; FileName).DateCreated, EarliestDate, LatestDate
         
if oFile.getFile(Directory amp; FileName).DateCreated >= EarliestDate and oFile.getFile(Directory amp; FileName).DateCreated <= LatestDate
<snip>
 

Кроме того, используйте правильный синтаксис для TransferText :

 If oFile.getFile(Directory amp; FileName).DateCreated >= DateEarliest And oFile.getFile(Directory amp; FileName).DateCreated <= DateLatest Then
    DoCmd.TransferText TransferType:=acLinkDelim, TableName:="CsvTbl", FileName:=Directory amp; FileName, HasFieldNames:=True
End If
 

Комментарии:

1. Добавлена отладка; однако ошибка по-прежнему остается «синтаксической ошибкой» в строке «if oFile.GetFile…». даты взяты из двух текстовых полей, каждый из которых отформатирован как общая дата. и нет никакого отладочного вывода, на который можно было бы посмотреть. спасибо вам за вашу помощь

2. там нет отладочного вывода, на который нужно смотреть … о да, там будут три значения. И, конечно, строка отладки не исправляет ваш синтаксис, а только отображает его для вас.

3. получил следующий отладочный вывод: 16/16/2021 11:50:26 УТРА 9/17/2021 9/15/2021 9/16/2021 11:50:26 УТРА 9/17/2021 9/15/2021 9/16/2021 11:50:26 УТРА 9/17/2021 9/15/2021 …. однако часть кода «открыть файл» вообще не работает

4. Смотрите расширенный ответ, пожалуйста