2015-03-19 283 views
1

我创建了毫秒获得自营csv文件按钮到Access数据库这样的事情VBA:导入CSV文件

DoCmd.TransferText TransferType:=acLinkDelim, TableName:="student", _ FileName:="C:\Saurabh\test.csv", HasFieldNames:=True

这是工作的罚款,如果文件名不包含任何点。但如果它包含点例如test1.1.csv。它抛出以下错误

Microsoft Access数据库引擎找不到对象 test1.1.csv。

我该如何解决这个问题?

+0

点被认为是文件类型扩展名。所以Access正在读取您的文件类型为.1.csv而不是.csv – izzymo 2015-03-19 07:16:14

+0

好,那么我怎样才能解决它,因为我的文件名包含点。 – Saurabh 2015-03-19 07:17:33

+1

更改文件的名称。 – 2015-03-19 08:01:08

回答

4

尝试获取文件的简称。文件的简称是旧的DOS“8.3”字符符号。你可以用DIR /X看到:

       8.3 characters file name 
              | 
              v 
31/01/2015 23:50  29 365 798 CETOTB~1.LOG CETO.TBX-01-2015.LOG 
28/02/2015 23:50  31 449 129 CETOTB~2.LOG CETO.TBX-02-2015.LOG 
19/03/2015 13:12  19 190 300 CETOTB~3.LOG CETO.TBX-03-2015.LOG 
31/12/2014 23:50  37 562 412 CE8EEC~1.LOG CETO.TBX-12-2014.LOG 

正如你可以在上面看到,最后一列中包含长文件名,而前一个短文件名。短文件名似乎从来没有点。

在VBA中使用File对象的ShortPath属性来获取它:

Set fso=CreateObject("Scripting.FileSystemObject") 
Set objFolder = fso.GetFolder("c:\my folder") 

Set objFiles = ObjFolder.Files 
For Each f In objFiles 
    WScript.Echo f.ShortPath 
Next 

TransferText方法能很好地工作了。

+0

是的,看起来不错,谢谢。 – Saurabh 2015-03-19 14:29:10

+0

我发现这不适用于UNC路径。 'fso'将返回原始路径,而不是它的简短版本。 – Brad 2017-01-31 23:38:56