感谢previous post and some excellent direction我能够根据自己的需求创建成功的代码。但是,表/数据有所改变,我还没有达到我的最终目标,即根据另一个单元格的值迭代粘贴函数。我见过this post on SO,但它没有帮助我。我在using loops in Excel VBA上找到了其他资源,并创建了您在下面看到的非常简单的Do While
代码。
我的问题:当它达到F列的值时,我无法让代码停止循环。它找到第一个可用的情况并无休止地输出正确的信息而不停在 n 值并继续前进
以下是数据表:
A B C D E F
R1 Name Num Status #Orig #Act #Rem
R2 ABC 032 Complete 22 0 11
R3 LMN 035 In Prog 25 21 4
这是我的代码:
Sub Copy_Pending_Status()
Dim srcrange As Range
Dim wb As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim i As Integer
Set wb = ActiveWorkbook
Set ws1 = wb.Worksheets("SIS Agregate")
Set ws2 = wb.Worksheets("Center Detail")
Set srcrange = ws2.Range("C2:C61")
For Each Row In srcrange.Cells
Select Case Row.Value
Case "In Progress"
Do While i <= Row.Offset(0, 3).Value
Set LastCell = ws1.Cells(ws1.Rows.Count, "C").End(xlUp).Offset(1)
LastCell.Offset(0, 0).Value = Row.Offset(0, -2).Value
LastCell.Offset(0, 12).Value = Row.Offset(0, -1).Value
LastCell.Offset(0, 4).Value = "Not Yet Scanned"
Loop
Case "Complete"
Do While i <= Row.Offset(0, 3).Value
Set LastCell = ws1.Cells(ws1.Rows.Count, "C").End(xlUp).Offset(1)
LastCell.Offset(0, 0).Value = Row.Offset(0, -2).Value
LastCell.Offset(0, 12).Value = Row.Offset(0, -1).Value
LastCell.Offset(0, 4).Value = "Purged"
Loop
End Select
Next Row
End Sub
我尝试将Do While i <= Row.Offset(0, 3).Value
设置为(0,3)
(0,4)
和(0,6)
,因为我不确定它是否计算来自&#34; A&#的列数34;作为一个,&#34; C&#34;作为一个人,或者&#34; C&#34;零和偏移是三(右边)。
我想要注意的是,从每种情况中删除Do While
和Loop
行代码会使此函数正确,但每行只能执行一次 - 而不是列F表示多次
我是否过度简化了这一点并遗漏了一些明显的关键信息?为了让这个小循环正常运行,我需要做些什么改变?
答案 0 :(得分:1)
你的循环中没有任何东西改变了i的值,所以&#34; Do While&#34;条件总是得到满足。您需要迭代i的值,以便最终不会满足条件。在每个循环结束时,添加:
i = i + 1
这将允许它计算循环运行的次数,并在基于F列的一定次数的迭代后停止。
您还希望在每行之间将i重新设置为零。在&#34; End Select&#34;之间进行此操作。和&#34;下一行&#34;:
End Select
i = 0
Next Row