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