自定义导入VBA问题

时间:2016-03-18 10:27:45

标签: access-vba do-while data-import do-loops

我使用自定义导入功能(下面的骨架)从" Linked"收集数据。文本文件(包含标题/记录/页脚)。标题的第一个字段将始终包含123,但我需要跳过那些标题中第二个字段以字母“#34; AC"”开头的记录。

我试图创建一个循环,当它找到第一个字段包含" 123"第二个字段以" AC"开头。然后跳过记录,直到它找到另一个" 123",然后通过循环再次评估,并且只是打破循环以写出不包含的记录" AC"在标题的第二个字段中。

然而,我得到&#34;编译错误:增加不是可选的&#34;基于行Loop Until rs!Field1 = "123" And Left(rs!Field2) <> "AC",当尝试以下内容并且不太确定如何检查第二个字段中的字符串是否以&#34; AC&#34;开头。感谢。

Public Function FormatTextFile()

Dim db As Database
Dim rs, rsa As Recordset
Dim cCount as double

Set db = CurrentDb
Set rs = db.OpenRecordset("Flow_20160316")

cCount = 1

Do

    Do While rs!Field1 = "123" And Left(rs!Field2, 2) = "AC"
        Debug.Print "Code Skipped on Record " & cCount
        cCount = cCOunt + 1
        rs.MoveNext
    Loop Until rs!Field1 = "123" And Left(rs!Field2) <> "AC"

Select Case rs!Field1

    Case Is = "123"
        'Code continues and writes some variables to tables'
        Case else
        Debug.Print "Code Skipped on Record " & cCount
    End select
    cCount = cCOunt + 1
rs.MoveNext

Loop until rs.eof

rs.Close
db.Close

Set rs = Nothing
Set db = Nothing

End Function

1 个答案:

答案 0 :(得分:1)

VBA中的Do / While / Until循环有多种形式,SO上有一个答案(但我现在找不到),列出了7个版本。

修改: found it - 警告:如果您没有空余时间,请不要去那里)

但是

Do While <condition>
    ' stuff
Loop Until <condition>

是不允许的 - 这是语法错误。这种情况只能出现一次。

这是一个不错的概述: http://www.excelfunctions.net/VBA-Loops.html#DoWhileLoop

话虽如此,带嵌套循环的代码似乎过于复杂。你不能简单地这样做吗?

Do While Not rs.EOF

    If rs!Field1 = "123" And Left(rs!Field2, 2) = "AC" Then
        Debug.Print "Code Skipped on Record " & cCount
    Else
        ' regular code
    End If

    cCount = cCount + 1
    rs.MoveNext

Loop

注意:使用Do While Not rs.EOF可以避免在rs为空时出错。