设定范围内的无限循环
我不知道为什么这个无限循环。 虽然我设置了范围,但我的代码不会在我的范围(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
好吧,我必须正确地格式化你的代码来看看这个问题,在这里,它正确地缩进,没有空格, cell
variables为cel
, row
variables交换为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次目前的原因。
rngRow
variables被设置为B8:F8
,然后是B9:F9
等,每个循环。
在rngRow
设置为B9:F9
之前, cel
variables被设置为B8
, C8
, D8
… B9
, C9
等等,所以如上所述,对于该范围内的任何单元格,最终会得到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
道歉,如果这听起来居高临下,那不是我的意图。
希望这可以帮助!