以下代码给出了错误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)+”)。
答案 0 :(得分:1)
当您尝试访问超出范围的单元格时,通常会出现错误1004,例如单元格(0,1)。考虑page = 0,i = 0和n = 0的情况:
您正在访问Cells(0 * 4 + 0 * 7 + 0, m)
- > Cells(0, m)
这会导致Excel抛出错误1004。