嵌套如何工作直到循环?

时间:2019-02-21 11:56:37

标签: excel vba loops

我尝试遍历两个工作簿中的列-从第一个工作簿中我需要复制每第4行,在第二个工作簿中我需要将复制的数据粘贴到第二行中的新列中。

每4行复制一次:

copy every 4th row

将其粘贴到第2行的新列中

paste it in new column in row2 谢谢你的帮助

这是我拥有的代码:

Dim x As Integer
Dim b As Integer
x = 6
b = 3
Do Until x < 60
Do Until b < 16
Workbooks("MailTemplate.xlsx").Activate
Cells(x, 2).Copy
Workbooks("Mail2xlsxTemplate.xlsx").Activate
Cells(2, 3).PasteSpecial
x = x + 4
Loop
b = b + 1
Loop

2 个答案:

答案 0 :(得分:1)

首先,您的循环将永远不会执行,因为终止条件在循环开始之前已经为假。 x小于60,因此外循环永远不会执行,而b小于16因此,即使将执行外循环,也永远不会执行内循环。现在假设您创造了更多真实的条件,那么当我正确格式化您的代码时:

Do Until x < 60
    Do Until b < 16
        Workbooks("MailTemplate.xlsx").Activate
        Cells(x, 2).Copy
        Workbooks("Mail2xlsxTemplate.xlsx").Activate
        Cells(2, 3).PasteSpecial
        x = x + 4
    Loop
    b = b + 1
Loop

您会立即看到x在内部循环中递增,但是内部循环永远不会终止,因为b在该循环中从未递增。

这就是Do Until循环的工作方式,这就是为什么您应该始终正确格式化代码的原因!

在您的情况下,您可能需要使用Do ... While循环。该循环将至少始终执行一次,因为终止条件仅在循环体的末端进行检查。

或者您可以使用While...Wend循环,只有在终止条件为真(包括最合适的时间)时,才会执行该循环。

答案 1 :(得分:0)

Dim x As Integer

Dim b As Integer

For x = 6 To 60
  For b = 3 To 16
    Workbooks("MailTemplate.xlsx").Activate
    Cells(x, 2).Copy
    x = x + 4
    Workbooks("Mail2xlsxTemplate.xlsx").Activate
    Cells(2, 3).PasteSpecial
    b = b + 1
  Next x
Next b