#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.echo2. Что касается другой ошибки, каковы значения в
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. Смотрите расширенный ответ, пожалуйста