Excel VBA Union返回原始范围

时间:2014-01-02 21:48:58

标签: excel-vba vba excel

尝试使用Union(Range,Range)时遇到问题。我试图从一个工作表中复制某些行并将它们粘贴到一个新文件中。我的问题是,联盟没有在该范围内添加更多行;它返回原始范围。如果我翻转参数的顺序,它只返回.Rows(i + 1)行。我的测试数据有两行应该复制。最后的行数是1.我做错了什么?!

Dim lastRow, i As Long
Dim CopyRange As Range
lastRow = ActiveSheet.Rows.count

With Sheets(ActiveSheet.Name)
    lastRow = .Range("A" & .Rows.count).End(xlUp).Row

    For i = 2 To lastRow
        Dim endTime As Date
        endTime = DateValue(Trim(.Range("E" & i).Value))
        If endTime = Date - 1 Then
            If CopyRange Is Nothing Then
                Set CopyRange = .Rows(i + 1)
            Else
                Set CopyRange = Union(CopyRange, .Rows(i + 1))
            End If


        End If
    Next
End With

CopyRange.Copy

1 个答案:

答案 0 :(得分:1)

实际上CopyRange包含许多单独的范围(区域)。有关详细信息,请参阅here。 当您使用单独的行进行Union操作时(我的意思是它们之间还有另一行),它实际上并没有添加Row,而是添加了新的Area。因此,如果你添加MsgBox CopyRange.Areas.Count,你会看到区域的数量(如果你要添加MsgBox CopyRange.Rows.Count,它会在多个区域的情况下得到不正确的结果 - 它将获得第一个区域中的行数)。 总之,您的代码适合我,并且应该适合您。您可以在CopyRange.Select之前添加CopyRange.Copy行,并在此行上设置断点。你会看到工会运作良好