【问题标题】:Code Interruption Error代码中断错误
【发布时间】:2015-07-14 16:31:41
【问题描述】:

所以我下面的代码试图在 H 列中找到 WIP。如果我们找到 WIP:复制 3 个单元格并在下一列中复制 10 个单元格,或者在同一行中,或者在下一个可用行中。

由于某种原因,代码仅针对第一个“WIP”值成功运行循环,然后给出代码中断错误。有人能看出为什么会这样吗?

谢谢你,奥利

Sub Step1_update()

Dim dblSKU As Double
Dim strDesc As String
Dim strType As String
Dim BrowFin As Integer
Dim Browfin1 As Integer
Dim Counter As Integer
Dim Trowfin As Integer

Counter = 0

Worksheets("Final").Activate

Trowfin = 5
BrowFin = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row

'loop 1
Do While Trowfin < BrowFin

    'If 1 (set the 3 values)
    If Range("H" & Trowfin).Value = Range("H3").Value Then

         dblSKU = Range("F" & Trowfin).Value
         strDesc = Range("G" & Trowfin).Value
         strType = Range("H" & Trowfin).Value

         'Find the last used row in Col J
         Browfin1 = (ActiveSheet.Range("J" & Rows.Count).End(xlUp).Row)

         Counter = 0
         'paste values 15 times
         Do While Counter < 15

            'If 2
            If Browfin1 > (Trowfin + Counter) Then

                   Range("J" & Browfin1).Value = dblSKU
                   Range("K" & Browfin1).Value = strDesc
                   Range("L" & Browfin1).Value = strType


            ElseIf Browfin1 < (Trowfin + Counter) Then

                   Range("J" & (Trowfin + Counter)).Value = dblSKU
                   Range("K" & (Trowfin + Counter)).Value = strDesc
                   Range("L" & (Trowfin + Counter)).Value = strType

            Else

                   Range("J" & (Trowfin + Counter)).Value = dblSKU
                   Range("K" & (Trowfin + Counter)).Value = strDesc
                   Range("L" & (Trowfin + Counter)).Value = strType

            End If

        'Loop to paste the WIP 15 times
        Loop

             Trowfin = Trowfin + 1
             Counter = 0

    'If cell (H...) is not a WIP
    Else

        Trowfin = Trowfin + 1

    'If 1
    End If



'loop 1
Loop

End Sub

【问题讨论】:

  • 您希望Counter 每次都增加吗?它应该在Else 之外,就在Loop 附近吗?
  • 我希望计数器增加 15 次,以便我可以将值粘贴 15 次,旁边是我搜索的值。虽然我需要 trowfin 在循环完成后返回其原始值。这样我就可以继续搜索列表。我已经更新了我的工作,告诉我你的想法。
  • 在我看来,您正在乞求一个无限循环,将Counter 放入条件中。这可能就是代码中断的原因,除非您使用 BREAK 键手动破坏代码。
  • 怎么样?我重置了计数器,这样每次在列表中找到我的关键字时,我都会复制 15 次。还是我看错了?
  • 您的编辑删除了增量,但我会这样做Range("L" &amp; (Trowfin + Counter)).Value = strType : End If : Counter = Counter + 1: Loop。在该代码中,: 代表一个新行,尽管它在技术上会运行复制并使用冒号粘贴。您需要在条件之外增加,否则如果没有命中该代码分支,您将面临计数器从不更新的风险。

标签: vba if-statement while-loop interruption


【解决方案1】:

您之前的代码如下所示:

  Else
    Range("J" & (Trowfin + Counter)).Value = dblSKU
    Range("K" & (Trowfin + Counter)).Value = strDesc
    Range("L" & (Trowfin + Counter)).Value = strType

    Counter = Counter + 1
  'If 2
  End If
Loop

你应该这样做:

  Else
    Range("J" & (Trowfin + Counter)).Value = dblSKU
    Range("K" & (Trowfin + Counter)).Value = strDesc
    Range("L" & (Trowfin + Counter)).Value = strType

  'If 2
  End If
  Counter = Counter + 1
Loop

您当前的代码在Else 内有增量,这意味着循环执行时它有可能不会被命中。如果发生这种情况,您的循环将无限循环,导致 Excel 崩溃或代码中断。

如果要基于计数器进行循环,则需要确保计数器在非无限长的时间内达到退出条件。

【讨论】:

    猜你喜欢
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2019-01-07
    • 2010-11-26
    • 2020-03-30
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多