将一行中的行粘贴到另一张到第一个空行

时间:2017-09-19 20:30:46

标签: excel vba excel-vba

我见过一些例子,但他们一直在使用.Select和.Activate。我正在努力学习如何不再使用它们,因为每个人都说你应该试着远离它们。

我想要连续一行,然后将其复制到另一张纸上的第一个空白行。我很接近,但它不起作用。

UsdRws = Range("A" & Rows.Count).End(xlUp).Row


With Sheets("Totals by Department")
    .Range("A1:Z" & UsdRws).autofilter Field:=1, Criteria1:="1450"
    .Range("A2:Z" & UsdRws).SpecialCells(xlCellTypeVisible).EntireRow.COPY
End With


Set NextRow = Range("A" & Sheets(2).UsedRange.Rows.Count + 1)


Sheets(2).NextRow.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

Set NextRow = Nothing

第一部分完美复制,我真的需要帮助将其粘贴在另一张纸上。我还将采取其他建议来清理代码。就像我说的那样,我正努力学会更好地写作。第二部分是凌乱的,因为我一直在添加和编辑它,但现在我迷路了。

2 个答案:

答案 0 :(得分:2)

您的“NextRow”对象是一个Range对象,但您将其称为Sheets(2)的方法或属性。

尝试删除表格(2)。然后从下一行开始。

Set NextRow = Sheets(2).Range("A" & Sheets(2).UsedRange.Rows.Count + 1)
NextRow.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

答案 1 :(得分:0)

' UsdRws is equal the last used row on whichever sheet is active at the moment that this code runs 

UsdRws = Range("A" & Rows.Count).End(xlUp).Row

' this code properly references ranges on a specific worksheet, regardless of which worksheet is active

With Sheets("Totals by Department")
    .Range("A1:Z" & UsdRws).autofilter Field:=1, Criteria1:="1450"
    .Range("A2:Z" & UsdRws).SpecialCells(xlCellTypeVisible).EntireRow.COPY
End With

' NextRow is reference to a cell on whichever sheet is active at the moment that this code runs
' but the row referenced is same as the first emply cell on Sheets(2) 

Set NextRow = Range("A" & Sheets(2).UsedRange.Rows.Count + 1)

' NextRow is already a range .... so it should be NextRow.PasteSpecial ......

Sheets(2).NextRow.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

Set NextRow = Nothing

这可能是你想要的

With Sheets("Totals by Department")
    UsdRws = .Range("A" & .Rows.Count).End(xlUp).Row
    .Range("A1:Z" & UsdRws).autofilter Field:=1, Criteria1:="1450"
    .Range("A2:Z" & UsdRws).SpecialCells(xlCellTypeVisible).EntireRow.COPY
End With

Set NextRow = Sheets(2).Range("A" & Sheets(2).UsedRange.Rows.Count + 1)

NextRow.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Application.CutCopyMode = False

Set NextRow = Nothing