【发布时间】: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" & (Trowfin + Counter)).Value = strType : End If : Counter = Counter + 1: Loop。在该代码中,:代表一个新行,尽管它在技术上会运行复制并使用冒号粘贴。您需要在条件之外增加,否则如果没有命中该代码分支,您将面临计数器从不更新的风险。
标签: vba if-statement while-loop interruption