无法在嵌套for循环中使用特定变量?

时间:2014-05-30 19:17:32

标签: excel vba loops excel-vba nested-loops

以下代码给出了错误1004.(注意,iElements和iSortOrder()在代码中已经很好地定义了,而CopyHeader是一个子例程)

    Dim page As Long
    page = 0

    For i = 0 To iElements

        ' Every five elements is a new page.  Every new page, copy the header and update current page count.
        If ((i Mod 5) - 1) = 0 Then
            CopyHeader ((page * 34) + 1)
            page = page + 1
        End If

        For m = 1 To 16
            For n = 0 To 7
                Sheet2.Cells((page * 4) + (i * 7) + n, m) = Sheet1.Cells((5 + (iSortOrder(i) * 9) + n), m)
            Next n
        Next m
    Next i

如果我将嵌套循环中的单行更改为:

Sheet2.Cells((4) + (i * 7) + n, m) = Sheet1.Cells((5 + (iSortOrder(i) * 9) + n), m)

也就是说,我只删除了这一行中对页面的引用,代码执行得很好。

令我感到困惑。为什么在这一行中引用我的“页面”变量不起作用?我认为它可能是一个范围问题 - 就像VBA不允许在for循环之外定义的变量在for循环中使用 - 但是“page”在循环的早期使用得非常好。那有什么不对?

如果不清楚,代码的目的是以不同的顺序将单元格块从sheet1复制到sheet2,在处理过程中剥离一些空行(9行向下到7行)。 Sheet1在开头有一个标题(“5+”),Sheet2在每个页面都需要一个标题(“(* * 4)+”)。

1 个答案:

答案 0 :(得分:1)

当您尝试访问超出范围的单元格时,通常会出现错误1004,例如单元格(0,1)。考虑page = 0,i = 0和n = 0的情况:

您正在访问Cells(0 * 4 + 0 * 7 + 0, m) - > Cells(0, m)

这会导致Excel抛出错误1004。