【问题标题】:Restart Loop At Last Read Row在最后读取行时重新启动循环
【发布时间】: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


【解决方案1】:

这就是我的工作方式:

我定义了一个CurrentRow和一个LastRow如下:

CurrentRow          = rw.Cells(8).Row
LastRow             = CurrentRow - 1

然后我创建了两个新的子过程,一个用于处理重试,一个用于处理忽略并将重试的起点设置为rw = LastRow + 1,将忽略设置为rw = CurrentRow + 1,同时使用相同的循环

Do While oExcelObject.CountA(oExcelSheet.Rows(rw)) > 0
    subDoWork oExcelSheet.Rows(rw)
    rw = rw + 1
Loop 

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多