【发布时间】:2018-08-20 21:20:17
【问题描述】:
我正在运行一个循环来从 Excel 读取数据,当我收到错误时,我的脚本会停止,并在 MsgBox 中给我一个 vbAbortRetryIgnore 选项。如果出现错误,我希望能够在使用“重试”按钮停止的那一行的开头重新启动循环,或者跳过该行并使用“忽略”按钮转到下一行。
我原来的循环如下:
Sub Main
subGoToScreen "DELP", "********", "0000000001"
Dim rw
TITLE = "DELP Script"
rw = 2
Do While oExcelObject.CountA(oExcelSheet.Rows(rw)) > 0
subDoWork oExcelSheet.Rows(rw)
rw = rw + 1
Loop
End Sub
然后,如果我收到类似Len(rw.Cells(1).Value) < 8 的错误,那么如果选择了“重试”,我想返回该行中的第一个单元格重新启动循环。如果选择了“重试”,我将使用此循环:
Sub MainRetry
Dim rw
TITLE = "DELP Script"
rw = oExcelSheet.Rows(rw).Cells(1)
Do While oExcelObject.CountA(oExcelSheet.Rows(rw)) > 0
subDoWork oExcelSheet.Rows(rw)
rw = rw + 1
Loop
End Sub
它不起作用并给我一个运行时错误。有谁知道如何识别我正在阅读的当前行,记住该行并重新阅读该行或移动到下一行?目前,在没有第二个循环的情况下,它会在 rw.Cells(2).Value 处重新读取工作表。
【问题讨论】:
-
rw = oExcelSheet.Rows(rw).Cells(1)是如何工作的?在分配之前指定变量rw。您是否打算通过在错误发生之前到达的行索引,此时rw在本地声明并且您没有传递任何参数,因此它永远不会像您预期的那样工作。 -
是的,没错。对于重试,我打算从错误发生之前的行首开始。
-
兰基玛特谢谢你推我
标签: excel loops vbscript msgbox