Проблема импорта VBA Access CSV из netdrive с помощью оболочки - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть проблема, которую я не могу понять. Квест состоит в том, чтобы импортировать CSV-файл из сетевого привода.

В базовой версии файлы для импорта выбирались автоматически по коду:

Function FilesAfterDate(Directory As String, FileSpec As String, AfterDate As Date) As String()
    'Requires a reference to the Microsoft Scripting Runtime object lib
    Dim oFS As New FileSystemObject, oFile As File
    Dim listFiles() As String
    Dim i As Long

    i = 0
    If Right(Directory, 1) <> "\" Then Directory = Directory & "\"
    For Each oFile In oFS.GetFolder(Directory).files
        If oFile.DateLastModified > AfterDate And oFile.Name Like FileSpec Then
            ReDim Preserve listFiles(i)
            listFiles(i) = oFile.Name
            i = i + 1
        End If
    Next
    FilesAfterDate = listFiles
End Function

А затем он был импортирован по коду (для каждого файла импорта (i), где ImportReport = полный путь файла импорта (i))

DoCmd.TransferText acImportDelim, "ImpSpec_" & sObjSpec & "Csv", "tb" & sObjName & cloneTableNameDesc, ImportReport, False

Это решение работает очень медленно, поэтому с помощью пользователей этого портала я создал импорт оболочки:

fileDetails = Split(CreateObject("wscript.shell").exec("cmd /c pushd " & Chr(34) & source_path & Chr(34) & " & forfiles /S /D +" & s_data & " & popd").StdOut.ReadAll, Chr(10))

и если я использую ту же команду импорта, где ImportReport = полный путь к fileDetails (i), я получу номер ошибки 31519.

Я использовал debug.print для проверки всех типов, путей и т. Д., И все они одинаковы. Однако решение с оболочкой не работает ... Любая идея, почему?

РЕШИТЬ:

Как я понял, разделение функции оболочки на массив почему-то не имеет правильных данных / имен для доступа.

Это сработало, когда вместо разделения функции оболочки я просто присвоил ей строковое значение

full_string_paths = CreateObject("wscript.shell").exec("cmd /c pushd " & Chr(34) & source_path & Chr(34) & " & forfiles /S /D +" & s_data & " & popd").StdOut.ReadAll

и затем используя функцию Mid и Instr, я создал массив правильных имен файлов

После этого все заработало отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...