根据列值粘贴N次不工作

时间:2014-05-15 21:00:31

标签: excel excel-vba copy-paste do-while vba

感谢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 WhileLoop行代码会使此函数正确,但每行只能执行一次 - 而不是列F表示多次

我是否过度简化了这一点并遗漏了一些明显的关键信息?为了让这个小循环正常运行,我需要做些什么改变?

1 个答案:

答案 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