TransferText错误地导入了" FS ###"等字符串。作为货币

时间:2017-09-15 20:55:54

标签: vba csv ms-access access-vba ms-access-2016

我正在使用VBA DoCmd.TransferText命令将CSV文本文件中的数据导入Access数据库中的新表。我遇到了一些问题,其中某些文件的前三列中的文本数据作为货币导入。我无法弄清楚发生了什么。

Here是一个测试数据库,还有一个正确导入的CSV(VollintineLines.csv)......

PipeID,UpstreamMH,DownstreamMH,Diameter,GISLength,Status
WS010353S,WS010353,WS010163,36,227.1984614,Fully Surveyed as Phase Work
WS011155S,WS011155,WS011154,8,418.5435318,Not Surveyed
WS011154S,WS011154,WS011153,8,303.9618911,Fully Surveyed as Phase Work

......还有一个没有(CourtLines.csv)。

PipeID,UpstreamMH,DownstreamMH,Diameter,GISLength,Status
FS020628S,FS020628,FS020462,10,278.72,Not Surveyed
FS020463S-1,FS020463,FS020462,12,248.39,Not Surveyed
FS020216S,FS020216,FS020215,12,227.53,Fully Surveyed as Phase Work

(请忽略数据库中未命名的对象,只是想弄清楚这里发生了什么,我没有打扰命名。)

以下是导入代码,您必须启用Microsoft Office 16.0对象库参考。

Private Sub Command0_Click()
Dim Path As FileDialog
Dim FileName As Variant
DoCmd.SetWarnings False
DoCmd.Hourglass True
Set Path = Application.FileDialog(msoFileDialogFilePicker)

    With Path
    .AllowMultiSelect = False
    .Title = "Select your File"
    .Filters.Add "All Files", "*.*"
    If .Show = -1 Then

        For Each FileName In .SelectedItems
        DoCmd.TransferText acImportDelim, , "TempPipeData", FileName, True
        Next FileName

    Else
        MsgBox "No File Selected to Import."
    End If

    End With
DoCmd.SetWarnings True
DoCmd.Hourglass False

End Sub

1 个答案:

答案 0 :(得分:0)

您显然遇到了一个相当模糊的错误,它影响了不使用导入规范的TransferText调用。 (它也在另一个网站here上讨论。)

解决方法包括:

  1. 使用this answer
  2. 中所述的导入规范
  3. 首先创建表,指定所需的列类型(在这种情况下为Text),然后从CSV文件导入现有(空)表。
  4. 如果上述两个选项都不合适,那么您可以使用COM Automation
    • 启动Excel实例,
    • 让Excel打开CSV文件,
    • 将其保存到XLS或XLSX,
    • 在Access VBA中使用TransferSpreadsheet导入Excel数据,然后
    • 删除临时XLS [X]文件。