2014-04-01 10 views
1

我導入* .csv文件到Access表用下面的代碼:VBA訪問進口場目的地不存在 - 字段名是亂碼

Dim fd As FileDialog 

Set fd = Application.FileDialog(msoFileDialogFilePicker) 

With fd 

    If .Show = -1 Then 

     DoCmd.TransferText TransferType:=acImportDelim, _ 
      TableName:="New References", _ 
      FileName:=.SelectedItems.Item(1), _ 
      HasFieldNames:=True 

     TextReferenceImport = .SelectedItems.Item(1) 
    Else 
     TextReferenceImport = "" 
    End If 
End With 

Set fd = Nothing 

不過,我得到以下錯誤:

Microsoft Visual Basic 
Field 'Name' doesn't exist in destination table 'New references.' 

顯然,Access和* .csv文件中的字段名稱都是「Name」。這也是* .csv文件的第一列。我也將HasFieldNames設置爲False,並將第一列名稱更改爲F1在訪問中,這似乎工作,所以我不認爲導入有任何問題。

爲什麼訪問閱讀這些奇怪的字符不存在在* .csv或表,然後擾亂進口?

+0

'.SelectedItems.Item(1)'正在'With'語句中使用,我假設?你能發佈整個代碼嗎? – Rich

回答

1

這些字符是UTF-8 BOM(byte order mark)。

除非是實際執行導入之前帶他們出去您的CSV的,我想你需要創建一個導入規範。

從Access用戶界面手動開始導入。選擇您的CSV文件後,選擇「第一行包含字段名稱」「導入文本嚮導」的第二頁。然後單擊「高級」按鈕並在導入規範對話框中選擇「Unicode(UTF-8)」「代碼頁」屬性。然後點擊「另存爲」爲您的導入規範命名。

Import Specification with Unicode (UTF-8) as Code Page

然後,當你從VBA調用DoCmd.TransferText您可以使用保存導入規格。下面是我在Access 2007中測試的一個示例...

DoCmd.TransferText TransferType:=acImportDelim, _ 
    SpecificationName:="YourTable Import Specification", _ 
    TableName:="YourTable", _ 
    FileName:="C:\Users\hans\Documents\YourTable.csv", _ 
    HasFieldNames:=True 
+0

謝謝,這解決了這個問題。 – valki