我有一个我无法弄清楚的问题。 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我创建了一个正确的文件名数组
之后一切都很完美。