目标中不存在VBA Access导入字段 - 字段名称出现乱码

时间:2014-04-01 14:37:56

标签: vba ms-access import ms-access-2007 access-vba

我正在使用以下代码将* .csv文件导入Access表:

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或表中不存在的奇怪字符,然后会中断导入?

1 个答案:

答案 0 :(得分:1)

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

除非在导入之前将它们从CSV中删除,否则我认为您需要创建导入规范。

从Access用户界面手动开始导入。选择CSV文件后,从"导入文本向导" 的第二页中选择" First Row包含字段名称" 。然后单击"高级" 按钮,为&#34选择" 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