在vba中读取csv文件不会移动到下一条记录,而是下一列

在vba中读取csv文件不会移动到下一条记录,而是下一列,vba,Vba,下面是Access应用程序的代码。正在发生的是正在读取包含记录的csv文件。如果未满足正确的条件,则程序需要转到csv文件中的下一条记录并继续处理。然而,当这种情况发生在“GoTo NEXT_RECORD”行时,它会立即跳到“NEXT_RECORD:Wend”并再次启动循环。但是,它不读取下一条记录,而是读取下一列。我需要知道如何将指针移动到下一条记录,而不是下一列。感谢您的帮助 Public Sub ReadCSV() Const FILE_NAME = "C:\files\test

下面是Access应用程序的代码。正在发生的是正在读取包含记录的csv文件。如果未满足正确的条件,则程序需要转到csv文件中的下一条记录并继续处理。然而,当这种情况发生在“GoTo NEXT_RECORD”行时,它会立即跳到“NEXT_RECORD:Wend”并再次启动循环。但是,它不读取下一条记录,而是读取下一列。我需要知道如何将指针移动到下一条记录,而不是下一列。感谢您的帮助

Public Sub ReadCSV()

    Const FILE_NAME = "C:\files\test.csv"

    On Error GoTo EH

    Dim sX As String
    Dim sSSN As String
    Dim sName As String

    Open FILE_NAME For Input As #1

    'read to the end of the line to skip header row
    While sX <> Chr(13)
        sX = Input(1, #1)
    Wend
    sX = Input(1, #1)

    While Not EOF(1)

        Input #1, sSSN

        If Len(sSSN) <> 11 Then
            Debug.Print "bad SSN: " & sSSN
            GoTo NEXT_RECORD
        End If

        Input #1, sName
        Debug.Print sSSN & vbTab & sName

NEXT_RECORD:
    Wend

    GoTo FINISH
EH:
    With Err
        MsgBox .Number & vbCrLf & .Source & vbCrLf & .Description
        .Clear
    End With

FINISH:
    Close #1
End Sub

解决方案

在恢复循环之前,读取到行的末尾。这将绕过其他字段。下面是一些代码,使用输入函数一次读取一个字符,直到到达回车符(字符13)。然后,它再读取一个字符以绕过换行符(字符10)。Windows将Chr(13)和Chr(10)组合用于线条端点

将以下行放在Goto的正前方,使其看起来像这样:

SSN,Name
684-92-4567,Marshall Applewhite
55589,Shoko Ashara
874-96-5124,Jim Jones
'read to the end of the line
sX = ""
While sX <> Chr(13)
    sX = Input(1, #1)
Wend
sX = Input(1, #1)

'now safe to move to next record
GoTo NEXT_RECORD
“读到行尾
sX=“”
而sX Chr(13)
sX=输入(1,#1)
温德
sX=输入(1,#1)
“现在可以安全地进入下一个记录了
转到下一张唱片
这是在例程开始处重复几行代码,这些代码执行相同的操作,以跳过CSV的标题行

Input#语句用于一次读取一个字段(读取到逗号或行尾),因此在继续之前必须跳到末尾

参考资料


这不是全部代码。例如,NRec的定义在哪里?请使用Option Explicit将这段代码放入一个新文件中并编译。然后添加缺少的任何内容或者——删除任何不能编译的东西,把你的问题归结为我们可以编译的东西。唐,我道歉。我认为我已经展示了足够的代码来帮助解决这个问题。我现在已经把上面所有的代码都放进去了。我还明确了file选项,并对其进行了编译。的确,有许多变量没有定义。我是vba和Access的新手。所以,这很有帮助。我现在真正需要做的就是让它工作起来。我个人想重写一下。这其中很多似乎都很神秘。上面列出了完整的代码,你能给我更多的指导吗?你看到什么突出的东西了吗?提前谢谢。唐,这可以解决问题。欢迎您编辑我的问题和示例。谢谢你的帮助。我已经找到了几本好的资源(书),我将大量阅读。我会在你的编辑完成后立即更新你的答案。原来的代码很神秘。一行一行地完成它,在你弄清楚每一行的作用时写下评论。另外,使用{F8}逐行查看已知csv文件的情况。明白了。我开始在option explicit打开的情况下查看它,但它无法编译。因此,在声明了第8个左右的变量后,我知道我需要记录并计划在不久的将来进行重写。再次感谢Don的投入和帮助,不客气。如果你把这个答案检查为正确答案,我就值得再重复15次。