【问题标题】:VBA- "On Error Resume Next" Excel Not RespondingVBA-“在错误继续下一个”Excel没有响应
【发布时间】:2021-11-14 02:52:09
【问题描述】:

我不确定在我的代码中插入On Error Resume Next 的位置。 1004 错误出现在Loop Until Cells(c, 1) Like "*" & ISIN & "*" 行。循环应该找到一个数字,如果没有数字,则进入循环中的下一个迭代。出现错误是因为未找到 ISIN 并且它永远循环。似乎更像是第二个Do Loop的问题。

    Dim a, b, c As Double
    Dim WS1, WS2 As String
    Dim ISIN As String

    WS1 = "1M_issues"
    WS2 = "MI_1"

    Sheets(WS2).Select
    Range("a1").Select

    'Count ISINs to find
    a = 1
    Do
        a = a + 1
    Loop Until Cells(a + 1, 1) = ""

    'Choose ISIN
    For b = 2 To a
        ISIN = Sheets(WS2).Cells(b, 1)

        'Find ISIN within cells (looping)
        Sheets(WS1).Select
        c = 1
        Do
        c = c + 1
        Loop Until Cells(c, 1) Like "*" & ISIN & "*"
        
        'Copy CR from general_report to target sheet
        Sheets(WS2).Cells(b, 2) = Sheets(WS1).Cells(c, 3)
    Next
End Sub

【问题讨论】:

  • 好的,简单的问题:如果ISIN没有出现在 1M_issues 表的 A 列中会发生什么?一个无限循环,这将使 Excel 崩溃!试试rTMP = Sheets(WS1).Find(ISIN, lookAt:=xlWhole): If Not rTMP Is Nothing Then Sheets(WS2).Cells(b, 2).Value = rTMP.Offset(0,2).Value?或者,甚至,Sheets(WS2).Cells(b,2).Value = Application.VLookup("*" & ISIN & "*",Sheets(WS3).Columns("A:C"),3,False)?
  • On error Resume Next 不会使 Excel 崩溃。它只是隐藏运行时错误(但它们无论如何都会发生!)。除非您确切知道自己在做什么,否则请忘记 Resume Next。那就是说:“崩溃”是什么意思? Excel崩溃并退出?或者你得到一个运行时错误?如果是后者:错误信息是什么?此时c 的值是多少?此时单元格的内容是什么?
  • 它可能最终没有响应,因为找不到 ISIN,它会一直循环到永远。当到达工作表末尾并且地址变得无效时,1004 会上升。
  • 找不到号码的情况需要处理。就这么简单。
  • @SozDaneron“未找到,移至下一个”就 VBA 而言不是错误。你想要像Loop Until (Cells(c, 1) Like "*" & ISIN & "*") Or (c>UsedRange.Rows.Count) 这样的东西来限制它查看的行数。

标签: excel vba for-loop


【解决方案1】:

感谢@chronocidal 和@FunThomas。我选择了Loop Until Cells(c, 1) Like "*" & ISIN & "*" Or (Cells(c, 1) = "")。我意识到这不是最优雅的解决方案,我可能稍后会回来改进它,但目前它正在工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多