尝试运行以下循环,但继续收到无效的下一个控制变量引用错误。似乎无法解决该问题,我相信这是一个简单的解决方案。
代码没有循环就可以正常工作,但是当我添加循环时,它现在已经失败了。
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
答案 0 :(得分:0)
首先,您的循环变量是i
和j
,在Next
语句中,您有k
和i
。用{{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
,则意味着j
是Integer
,而i
是Variant
。您必须为每个变量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
语句中更改一次即可。