我有一个代码,可以将一列数据从Sheet1的第二行复制到最后一行,并粘贴到Sheet2的下一个空行中。
With ActiveWorkbook.Worksheets("Sheet1")
.Range("A:K").AutoFilter Field:=6, Criteria1:=">=100", Operator:=xlAnd, Criteria2:="<=999"
On Error Resume Next
Set rng1 = .Range("H2:I" & .Cells(.Rows.Count, "H").End(xlUp).Row).Resize _
(.Cells(.Rows.Count, "H").End(xlUp).Row - 1).Offset(1). SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not rng1 Is Nothing Then
.Range(H2:I & .Cells(.Rows.Count, "H").End(xlUp).Row).Copy
Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
End If
End With
当过滤后的数据超过1行时,此代码运行良好;如果过滤后没有数据,则此代码也会停止复制。
现在的问题是,有时我过滤的数据只有一行数据。
.Range(H2:I & .Cells(.Rows.Count, "H").End(xlUp).Row).Copy
^这行代码不复制一行筛选后的数据。有什么办法我能修好吗?
问题是
On Error Resume Next
Set rng1 = .Range("H2:I" & .Cells(.Rows.Count, "H").End(xlUp).Row).Resize _
(.Cells(.Rows.Count, "H").End(xlUp).Row - 1).Offset(1).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
如果只有标题行和1个数据行,则意味着存在1:2
行。这意味着Range("H2:I" & .Cells(.Rows.Count, "H").End(xlUp).Row)
将给你H2:I2
,现在你可以通过1
将其调整为2 - 1
和Offset
,这样你就在H3:I3
了。
我觉得不对。
在复制之前,还要检查Debug.Print .Cells(.Rows.Count, "H").End(xlUp).Row
的值。