Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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 range.rows.count未在循环上更新_Vba_Excel_Loops - Fatal编程技术网

Vba range.rows.count未在循环上更新

Vba range.rows.count未在循环上更新,vba,excel,loops,Vba,Excel,Loops,预期功能是:对于列表A中的每个项目,扫描列表B并识别匹配项。将这些匹配项添加到一个范围,如果匹配项计数大于0,则输出该范围 这在循环的第一次运行时效果很好,但在所有后续迭代中,当WorkRng被正确添加时,我可以将其输出到一个单元格,并且它拥有所有数据,WorkRng.Rows.Count保持为1 Dim pasteRng as Range Dim WorkRng as Range For i = 2 To LastRow Set WorkRng = Sheets("Output").Ran

预期功能是:对于列表A中的每个项目,扫描列表B并识别匹配项。将这些匹配项添加到一个范围,如果匹配项计数大于0,则输出该范围

这在循环的第一次运行时效果很好,但在所有后续迭代中,当WorkRng被正确添加时,我可以将其输出到一个单元格,并且它拥有所有数据,WorkRng.Rows.Count保持为1

Dim pasteRng as Range
Dim WorkRng as Range

For i = 2 To LastRow

Set WorkRng = Sheets("Output").Range("A1:G1")


    For j = 2 To outputCount
            If Worksheets("Output").Cells(j, 8).Value = Worksheets("Vendor List").Cells(i, 1).Value Then 'this line correctly identifies matches on subsequent loops
                Set pasteRng = Sheets("Output").Range("A" & j & ":G" & j) 
                Set WorkRng = Union(WorkRng, pasteRng) 'this line does not increase WorkRng.Rows.Count except on the first loop
            End If
    Next j



If WorkRng.Rows.Count > 1 Then

'do some stuff

End If


Set pasteRng = Nothing
Set WorkRng = Nothing

Next i

如果您跳过行,您将得到一个多区域非连续范围,因此默认情况下,rows.Count将只返回第一个区域的行数,即1

在即时窗格中:

? Range("$A$1:$C$1,$A$3:$C$3").Rows.Count
>> 1
您可以更新您的If检查:

If WorkRng.Cells.Count > 6 Or  Then

'do some stuff

End If

您可以使用此通用函数来计算任何连续和非连续范围内的行数:

Function GetRowsCount&(rng As Range)
    Dim rngArea As Range
    For Each rngArea In rng.Areas
        GetRowsCount = GetRowsCount + rngArea.Rows.Count
    Next
End Function

为什么要将这两个范围设置为零?你有什么事吗?