下面的代码给我一个错误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)
也就是说,我仅在这一行中删除对页面的引用,代码执行得很好。
这让我感到困惑。为什么在此行中引用我的“ page”变量不起作用?我认为这可能是一个范围问题-像VBA不允许在for循环中使用在for循环之外定义的变量-但“ page”在循环的早期使用得很好。那怎么了
如果不清楚,代码的目的是按照不同的顺序将单元格块从sheet1复制到sheet2,从而在此过程中删除一些空白行(从9行下降到7行)。Sheet1的开头有一个标头(“ 5 +”),Sheet2的每一页上都需要一个标头(“(page * 4)+”)。
当您尝试访问超出范围的单元格(例如Cells(0,1))时,通常会发生错误1004。考虑page = 0,i = 0和n = 0的情况:
您正在访问Cells(0 * 4 + 0 * 7 + 0, m)
->Cells(0, m)
这将导致Excel引发错误1004。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句