我在尝试使用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
行,并在此行上设置断点。你会看到工会运作良好