我使用自定义导入功能(下面的骨架)从" 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
答案 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
为空时出错。