并非所有数据都从VBA中的CSV文件导入到Access

时间:2016-03-10 19:53:19

标签: vba csv

我的任务是创建一个宏,将其他网站的信息作为csv文件下载并保存到Access中。

我遇到的问题是并非所有数据都被导入Access。每次宏运行数据都将导入到Access表中,但是一些数据将完全丢失,并且存在许多“类型对话失败”和“截断失败”错误。

最终,除了一个特定字段外,Access表中的数据似乎没问题。数据可以包含单词,句子,字母,数字或任何内容中的任何内容,但只有数字值才会显示在字段中。然而,表中还有其他字段,其中包含类似的混合数据,可以很好地加载。

所有字段都设置为长文本。我不明白为什么在单个字段中,尽管是长文本字段,但只导入数值。

这是我到目前为止的代码

Sub FindFileAndFormatIt()

'Creating variables
Dim fileSysObj As FileSystemObject
Dim File As Object
Dim Folder
Dim filePath As String
Dim fileDate As Date
Dim uniqueID As String
Dim txtFileContent As String
Dim txtFileNumber As Integer

'File directory (dir)
Const myDir As String = "a folder"

Set fileSysObj = New FileSystemObject
Set Folder = fileSysObj.GetFolder(myDir)

'Looping through all files to find the newest CSV file
fileDate = DateSerial(1900, 1, 1)
For Each File In Folder.Files
    If InStr(1, File.Name, ".CSV") > 0 Then
        If File.DateLastModified > fileDate Then
            fileDate = File.DateLastModified               
            filePath = File.Path
        End If
    End If
Next File

'Ending the file scripting
Set fileSysObj = Nothing
Set Folder = Nothing

'Determine the file number available for use by the FileOpen function
txtFileNumber = FreeFile

'Open file in a read state
Open filePath For Input As txtFileNumber

'Getting file content
txtFileContent = Input(LOF(txtFileNumber), txtFileNumber)

'Close file
Close txtFileNumber

'Replace column titles with titles under 64 characters
' A whole bunch of txtFileContent = Replace(...)

'Determine the next file number available for use by the FileOpen function
txtFileNumber = FreeFile

'Open file in an edit state
Open filePath For Output As txtFileNumber

'Write new text data to file
Print #txtFileNumber, txtFileContent

'Close the file
Close txtFileNumber

'Import text file into Access
DoCmd.TransferText acTextTransfer, , "CustomerSurvey", filePath, True

End Sub

@ Davey C

以下是CSV文件的两个屏幕截图

截屏1

Screenshot 1

屏幕截图2 - 标题非常长

Screenshot 2 - the titles are really long

@ Davey C

以下是CSV文件的标题。粗体标题中的任何非数字数据都不会导入到Access中(前三行是非数字的,并且保留为空白)

JobNo,InvDate,StoreName,Address,“LCL:对准确性感到满意吗?”,“拼箱:改进评论”,LCL:一般评论,“拼箱:1-5幕后准备率”,“拼箱:1- 5销售率准备“,”LCL:1-5 WIS服务率“,拼箱:收到WIS的预库存电话? ,LCL:计数在计数窗口内完成了吗? , LCL:所有WIS计数器在计数开始时出现?,“LCL:重新检查完成并在计数期间保留副本?”,LCL:下一次计数的改进区域? ,完成调查的LCL经理的姓名:,WIS MOR的名称:,WIS:存储代表标签和已识别的产品? ,“WIS:改进评论”,WIS:一般评论,“WIS:1-5幕后准备率”,“WIS:1-5销售楼层准备率”,WIS:在计算之前完成库存前库存调用? ,WIS:足够的商店员工可以回答问题/疑虑? ,“WIS:在重新检查过程中发现错误?”,“WIS:重新检查完成并在计数期间保留副本?”,WIS:下一次计数的改进区域? ,WIS:计算结束时间? ,WIS:计算的开始时间?

以下是每个标题

的示例数据集

4586833,1 / 2/2016 2016:00 PM,SHOP EASY FOODS#7037 FULL,355 FRONT STREET,na,na,great job,5,5,1,Y,Y,Y,na,great工作,Darryl Krakowka,Darryl Moe,Y,不适用,没什么好工作! ,5,5,Y,Y,N,是的,没有伟大的工作! ,1/2/2016 9:42:00 PM,1/2/2016 6:00:00 PM

1 个答案:

答案 0 :(得分:0)

在你来VBA之前,我认为你应该首先按照我的建议确定这是问题所在。一旦你证明了这一点,使用REPLACE来排除标题行上逗号之前和之后的引号和错误空格应该相对简单:

Replace(yourString, Chr(34), "")
Replace(yourString, ", ", ",")
Replace(yourString, " ,", ",")

然后,您只需要格式化Access表以匹配这些标头字段。根据经验,在字段名称中使用空格是不好的做法。