在循环中跳过记录集并继续下一步

时间:2018-06-18 15:51:29

标签: ms-access access-vba

我继承了一个Access程序,该程序读取目录中的Excel文件,并使用DoCmd.TransferSpreadsheet acLinkSet rs1=db.openrecordset将它们带入For / Each Ofile循环中的Access。

然后进入循环:Do While not rs1.EOF

在循环中,它会立即检查前两个字段(ID和ID2)的格式是否正确。

如果格式化中存在任何错误,并且跳到For / Each循环的顶部并阅读下一个电子表格,则前一个代码将取消整个循环。

我想测试这两个字段但是如果没有错误则跳到Do While循环的顶部。我似乎无法做到这一点。所以我想跳过出错的记录集,但要阅读下一个记录集。

我的代码如下。我已经跳过了For / Each循环,因为它只是读取下一个Excel文件。以下代码位于For / Each循环中。

set rs2 = db.openrecordset("tblIn_Access")

source="C:\Documents\Test_for_import\" & oFile.name
doCMD.TransferSpreadsheet acLink, 10, ofile.name, source, true

Set rs1=db.openrecordset("Select * from " & ofile.name & " ;")

Do While not rs1.eof
   IDVal=rs1.fields(0).value
   ID2Val=rs1.fields(1).value

   if len(idVal) < 9 then
       'Here is where I want to stop and read the next record in the spreadsheet.
       ' I don't want any more processing to occur
   if left(id2Val) = "H" then
       'This is another case when I want to stop and read the next record
       ' and not do any more processing on the record

   'If these two errors do not occur then I want to continue with the next record
   'There is a lot of data manipulation here to get fields in the right format.
   ' Once they are correct I add the values to a table in Access
 rs2.AddNew
 rs2.("MBR_ID")=idval
 rs2.("ORD_ID")=id2val
 rs2.("DATE_IN")=dateinval
 rs2.("DATE_OUT")=dateoutval
 rs2.Update
 rs2.movenext

 rs1.movenext

Loop

我无法在前两个字段上停止处理,如果格式不正确,则返回并读取下一条记录。我唯一能做的就是代码最初做了什么,在下一个Excel工作表中停下来阅读。在检查ID和ID后,代码中有很多操作。 ID2,但我只希望在两个字段格式正确的情况下运行该代码。

1 个答案:

答案 0 :(得分:0)

这是其他未使用的&#39; GOTO命令的时间。

set rs2 = db.openrecordset("tblIn_Access")

source="C:\Documents\Test_for_import\" & oFile.name
doCMD.TransferSpreadsheet acLink, 10, ofile.name, source, true

Set rs1=db.openrecordset("Select * from " & ofile.name & " ;")

Do While not rs1.eof
   IDVal=rs1.fields(0).value
   ID2Val=rs1.fields(1).value

   if len(idVal) < 9 then GOTO SkipRecord

   if left(id2Val) = "H" then GOTO SkipRecord

 rs2.AddNew
 rs2.("MBR_ID")=idval
 rs2.("ORD_ID")=id2val
 rs2.("DATE_IN")=dateinval
 rs2.("DATE_OUT")=dateoutval
 rs2.Update
SkipRecord:
 rs2.movenext

 rs1.movenext

Loop