自定义导入 VBA 问题

Custom Import VBA issue

我使用自定义导入函数(下面的框架)从 "Linked" 文本文件(包含 header/records/footer)收集数据。 header 的第一个字段将始终包含 123,但我需要跳过那些 header 中第二个字段以字母 "AC".

开头的记录

我试图创建一个循环,当它发现第一个字段包含“123”并且第二个字段以 "AC" 开头时,然后跳过记录直到找到另一个“123”,然后再次评估循环,只跳出循环,将不包含 "AC" 的记录写入 header.

的第二个字段

但是我得到 "Compile error: Augment not optional" 基于第 Loop Until rs!Field1 = "123" And Left(rs!Field2) <> "AC" 行,在尝试以下操作时我不太确定如何检查第二个字段中的字符串是否以 "AC" 开头.谢谢

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

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

注意:如果 rs 为空,使用 Do While Not rs.EOF 可以避免错误。