2015-03-19 286 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