错误消息:无效的下一个控制变量引用

时间:2019-10-15 18:55:59

标签: excel vba loops

尝试运行以下循环,但继续收到无效的下一个控制变量引用错误。似乎无法解决该问题,我相信这是一个简单的解决方案。

代码没有循环就可以正常工作,但是当我添加循环时,它现在已经失败了。

Sub QC()

Dim i, j As Integer
Dim ws As String

For i = 1 To 2
For j = 0 To 1
ws = "Settings"

    Worksheets(ws).Range(Worksheets("QC").Cells(i * 5 - j, 2)) = Worksheets("QC").Cells(i * 5 - j, 3)
    Worksheets("QC").Cells(8, 5) = Worksheets("CE Results").Cells(9, 9)
    Worksheets(ws).Range(Worksheets("QC").Cells(i * 5 - j, 2)) = Worksheets("QC").Cells(i * 5, 2)

    Worksheets(ws).Range(Worksheets("QC").Cells(i * 5 - j, 2)) = Worksheets("QC").Cells(i * 5 + j, 3)
    Worksheets("QC").Cells(10, 5) = Worksheets("CE Results").Cells(9, 9)
    Worksheets(ws).Range(Worksheets("QC").Cells(i * 5 - j, 2)) = Worksheets("QC").Cells(i * 5, 2)

Next i
Next k

End Sub

2 个答案:

答案 0 :(得分:0)

首先,您的循环变量是ij,在Next语句中,您有ki。用{{1} }到k

另外,j的顺序是错误的,因为Next对应于Next i,所以For j的顺序应该是:

Next

此外,您可以在Next j Next i 中省略变量,这很容易出错。

更多说明:使用适当的缩进:)

答案 1 :(得分:0)

如果首先打开i循环结构 ,则需要将其关闭 last 。始终正确格式化代码(使用如下缩进),以便确保最后打开的循环结构(此处为j)必须首先关闭。

您尝试了另一种方法,所以出现了错误。

Dim i As Long, j As Long
For i = 1 To 2
    For j = 0 To 1
        ' your code
    Next j
Next i

还要注意,如果声明Dim i, j As Integer,则意味着jInteger,而iVariant。您必须为每个变量Dim i As Long, j As Long指定一种类型,否则VBA默认采用Variant

并且您应该将变量声明为Long,因为Excel的行数超过Integer不能处理的行。实际上,您始终可以使用Long而不是Integer,因为使用Integer没有好处:另请参见Why Use Integer Instead of Long?


其他推荐:

不要声明Dim ws As String

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Settings")

并像这样使用它:

ws.Range(…)

您也可以将这种技术用于其他工作表,因此您的代码变得更短,更容易维护。例如。如果工作表的名称发生更改,则只需在Set语句中更改一次即可。