设定范围内的无限循环

我不知道为什么这个无限循环。 虽然我设置了范围,但我的代码不会在我的范围(rng)中的所有行都被检查后退出循环。

Option Explicit Sub prnt() Dim i As Long Dim rng As Range Dim cell As Range Dim row As Range Set rng = ActiveSheet.Range("B8:F57") For Each row In rng.Rows For Each cell In rng.Rows.Cells If cell <> "" Then cell.Copy Range("i8").Offset(i, 0).PasteSpecial i = i + 1 Else End If Next cell Next row End Sub 

好吧,我必须正确地格式化你的代码来看看这个问题,在这里,它正确地缩进,没有空格, cellvariables为celrowvariables交换为rngRow

 Sub prnt() Dim i As Long Dim rng As Range Dim cel As Range Dim rngRow As Range Set rng = ActiveSheet.Range("B8:F57") For Each rngRow In rng.Rows For Each cel In rng.Rows.Cells If cel <> "" Then cel.Copy Range("i8").Offset(i, 0).PasteSpecial i = i + 1 Else End If Next cell Next row End Sub 

我立即注意到你的第一个循环对代码没有任何意义。 你使用rngRow (或原始row )作为循环控制variables,但从不在代码本身中引用它,所以程序已经花费了50倍的时间来处理,因为你循环了250个单元,每次循环50次目前的原因。

rngRowvariables被设置为B8:F8 ,然后是B9:F9等,每个循环。

rngRow设置为B9:F9之前, celvariables被设置为B8C8D8B9C9等等,所以如上所述,对于该范围内的任何单元格,最终会得到50个重复值不评价为“”。

这个代码修复了这个问题,它检查单元格的text属性,所以如果遇到单元格错误(#N / A等)

 Sub prnt() Dim i As Long Dim rng As Range Dim cel As Range Dim rngRow As Range Set rng = ActiveSheet.Range("B8:F57") For Each cel In rng.Rows.Cells If cel.Text <> "" Then cel.Copy Range("i8").Offset(i, 0).PasteSpecial i = i + 1 End If Next cel End Sub 

道歉,如果这听起来居高临下,那不是我的意图。

希望这可以帮助!