Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 集合范围内的无限循环_Vba_Excel - Fatal编程技术网

Vba 集合范围内的无限循环

Vba 集合范围内的无限循环,vba,excel,Vba,Excel,我不知道为什么这会无限循环。虽然我设置了范围,但在检查了范围(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 E

我不知道为什么这会无限循环。虽然我设置了范围,但在检查了范围(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
选项显式
副主席()
我想我会坚持多久
变暗rng As范围
暗淡单元格作为范围
暗行作为范围
设置rng=ActiveSheet.Range(“B8:F57”)
对于rng.行中的每一行
对于rng.Rows.Cells中的每个单元格
如果是单元格“”,则
手机,收到
范围(“i8”)。偏移量(i,0)。特殊
i=i+1
其他的
如果结束
下一个细胞
下一排
端接头

好的,我必须正确设置代码的格式来解决这个问题,在这里,它是正确缩进的,没有空格,
单元格
变量替换为
cel
,而
变量替换为
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
道歉如果这听起来有点屈尊,那不是我的本意


希望这有帮助

用于行中的每个单元格。Cells
用于行中的每个单元格。Cells
@TimWilliams:不是不同意,只是想知道:如果他只想遍历列表中的所有单元格,为什么要对行中的每个单元格执行两个循环,为什么不只对行中的每个单元格执行
,除非他想在两排之间做点什么。但是,由于OP写下了您所说的是真的,除了删除
.rows
之外,所以对于rng中的每个单元格只有
。单元格
不知道您的情况,您可能能够循环通过每个非空白单元格,
设置rng=Range(“B8:F57”)。特殊单元格(xlCellTypeConstants,23)
@ScottCraner:谢谢您的澄清,我不确定是
rng.cells
还是
rng.rows.cells
我自己;)为什么不放弃可怕的剪贴板,直接分配:
Range(“i8”).Offset(i,0)。Text=cel.Text
?@user1016274,因为有时您还希望保留格式、条件格式、验证、公式,甚至错误状态,AFAIK最好的方法是复制/粘贴。
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