2017-09-15 25 views
2

我正在使用VBA DoCmd.TransferText命令将数据从CSV文本文件导入到Access数据库中的新表中。我遇到了一些问题,其中某些文件的前三列中的文本数据导入为货币。我无法弄清楚发生了什么事。TransferText不正确地导入像“FS ###”这样的字符串作为货币

Here是与正确导入(VollintineLines.csv)一个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 
+0

测试数据库的ZIP文件缺少Access DB的文件名! –

+0

现在已修复,对不起! –

回答

0

你显然遇到影响不使用导入规格TransferText调用一个相当不起眼的错误。 (它也在其他网站上here讨论)

变通方法包括:

  1. this answer描述使用导入规格。
  2. 先创建表格,指定所需的列类型(在这种情况下为Text),然后从CSV文件导入到现有(空)表格中。
  3. 如果没有上述选项是可取的,那么你可以使用COM自动化来
    • 推出的Excel的实例,
    • 有Excel中打开CSV文件,
    • 将其保存到XLS或XLSX,
    • 在Access VBA中使用TransferSpreadsheet导入Excel数据,然后
    • 删除临时XLS [X]文件。
+0

谢谢你,与#2一起,只是在导入后清空表格,而不是删除它的工作。 另外,感谢您编辑我原来的帖子,使其更清晰。 –