不能在嵌套for循环中使用特定的variables?

下面的代码给了我一个错误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) 

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

这让我感到困惑。 为什么在这一行中引用我的“页面”variables不起作用? 我认为这可能是一个范围问题 – 就像VBA不允许在for循环之外定义的variables被用在for循环中 – 但是在页面循环之前,“page”被完全利用了。 那么怎么了?

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

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

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

这导致Excel抛出错误1004。