VBA使用shell从netdrive访问CSV导入问题

时间:2018-04-27 12:47:04

标签: vba shell csv ms-access import

我有一个我无法弄清楚的问题。 Quest是从netdrive导入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

然后它是由代码导入的(对于每个Importfiles(i),其中ImportReport = Importfiles(i)的完整路径)

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

这个解决方案效果很慢,所以在这个门户网站的用户的帮助下,我创建了一个shell导入:

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))

如果我使用相同的import命令,其中ImportReport = fileDetails(i)的完整路径,我得到错误号31519.

我使用debug.print来检查所有的vartype,路径等,它们都是一样的。然而,用壳溶剂不起作用......任何想法都是为什么?

解决:

正如我弄清楚的那样 - 将shell函数拆分为数组并不具备访问权限的数据/名称。

在没有拆分shell函数的情况下,我只是将它分配给字符串值

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我创建了一个正确的文件名数组

之后一切都很完美。

0 个答案:

没有答案