Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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 使用IsEmpty停止循环_Vba_Excel - Fatal编程技术网

Vba 使用IsEmpty停止循环

Vba 使用IsEmpty停止循环,vba,excel,Vba,Excel,我发现了一个线程,它直接应用于我试图在这里构建的代码 这段代码只有一个例外,它会不断循环 我认为如果不是IsEmpty将是VBA的描述符,一旦它到达列表的末尾就停止该程序。关于我的评论,请尝试以下操作。这会快得多 Sub Test() Dim ws1 As Worksheet, ws2 As Worksheet Dim CurCell_1 As Range, CurCell_2 As Range Dim Group As Range, Mat As Range, Ran

我发现了一个线程,它直接应用于我试图在这里构建的代码

这段代码只有一个例外,它会不断循环


我认为
如果不是IsEmpty
将是VBA的描述符,一旦它到达列表的末尾就停止该程序。

关于我的评论,请尝试以下操作。这会快得多

Sub Test()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim CurCell_1 As Range, CurCell_2 As Range
    Dim Group As Range, Mat As Range, Ran As Range
    Dim lRow As Long

    Set ws1 = ActiveWorkbook.Sheets("Scrap")
    Set ws2 = ActiveWorkbook.Sheets("FC Detail")

    With ws1
        lRow = .Range("E" & .Rows.Count).End(xlUp).Row

        Set Ran = .Range("E1:E" & lRow)

        For Each Mat In Ran
            Set CurCell_2 = ws2.Range("F8")
            For Each Group In Ran
                Set CurCell_1 = .Cells(Group.Row, Mat.Column)
                If Not IsEmpty(CurCell_2) Then
                    CurCell_2.Value = CurCell_1.Value
                End If
            Next
        Next
    End With
End Sub

你所说的“持续循环”是什么意思?如果代码从未退出循环,你怎么知道它“工作”呢?它持续运行是因为你正在寻址整个列。。。两次。为什么不找到最后一行,然后限制你的范围,如另一个链接所示?+1。Colin,如果您进行任何Excel VBA开发,那么查找最后一行将一直是您要做的事情。Siddharth在上面的代码中找到它的方式是你应该记住的。你还需要养成逐步浏览代码(F8)的习惯,看看它到底在做什么。说到好习惯,把DoEvents放在所有循环中,尤其是在开发过程中。这样,你就可以在无休止的循环中随时闯入。非常感谢你的帮助,经过一些修改,效果非常好。
Sub Test()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim CurCell_1 As Range, CurCell_2 As Range
    Dim Group As Range, Mat As Range, Ran As Range
    Dim lRow As Long

    Set ws1 = ActiveWorkbook.Sheets("Scrap")
    Set ws2 = ActiveWorkbook.Sheets("FC Detail")

    With ws1
        lRow = .Range("E" & .Rows.Count).End(xlUp).Row

        Set Ran = .Range("E1:E" & lRow)

        For Each Mat In Ran
            Set CurCell_2 = ws2.Range("F8")
            For Each Group In Ran
                Set CurCell_1 = .Cells(Group.Row, Mat.Column)
                If Not IsEmpty(CurCell_2) Then
                    CurCell_2.Value = CurCell_1.Value
                End If
            Next
        Next
    End With
End Sub