自定义导入 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
可以避免错误。
我使用自定义导入函数(下面的框架)从 "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
可以避免错误。