我正在使用以下代码将* .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或表中不存在的奇怪字符,然后会中断导入?
答案 0 :(得分:1)
这些
字符是UTF-8 BOM(byte order mark)。
除非在导入之前将它们从CSV中删除,否则我认为您需要创建导入规范。
从Access用户界面手动开始导入。选择CSV文件后,从"导入文本向导" 的第二页中选择" First Row包含字段名称" 。然后单击"高级" 按钮,为&#34选择" Unicode(UTF-8)" ;导入规范对话框中的代码页" 属性。然后点击"另存为" 为您的导入规范命名。
然后,当您从VBA调用DoCmd.TransferText
时,可以使用该已保存的导入规范。这是我在Access 2007中测试的一个例子......
DoCmd.TransferText TransferType:=acImportDelim, _
SpecificationName:="YourTable Import Specification", _
TableName:="YourTable", _
FileName:="C:\Users\hans\Documents\YourTable.csv", _
HasFieldNames:=True