Excel VBA Union 返回原始范围



我在尝试使用Union(Range,Range)时遇到问题。我正在尝试从一个工作表中复制某些行并将它们粘贴到新文件中。我的问题是联盟没有向范围添加更多行;它返回原始范围。如果我翻转参数的顺序,它只返回 .行 (i + 1) 行。我的测试数据有 2 行应该复制。末尾的行计数为 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

实际上CopyRange包含许多单独的范围(区域)。有关更多信息,请参阅此处。当您使用单独的行进行Union操作时(我的意思是还有另一行将它们改编),它实际上不会添加 Row,而是添加新的 Area。因此,如果您添加 MsgBox CopyRange.Areas.Count ,您将看到区域计数(如果您添加MsgBox CopyRange.Rows.Count则在许多区域的情况下,它会得到不正确的结果 - 它将获得第一个区域的行数)。作为结论,你的代码对我来说很好用,应该对你也很好用。您可以在CopyRange.Copy之前添加CopyRange.Select行,并在此行上设置断点。你会看到工会运作良好

相关内容

最新更新