vba过滤并粘贴为值

时间:2017-01-03 20:24:52

标签: excel vba

我正在尝试过滤并将值从一个工作表复制到另一个工作表但我陷入了我的一个代码中。我似乎无法粘贴为值或不知道正确的语法。

     Set ws1 = Worksheets("AT")
    Set ws2 = Worksheets("BT")
   lr1 = ws1.Cells(ws1.Rows.Count, "B").End(xlUp).Row
    lr2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row + 1
    With ws1.Range("B2", "R" & lr1)
        .AutoFilter Field:=1, Criteria1:="#N/A"
        .Copy Destination:=ws2.Cells(lr2, "A")
        .PasteSpecial (XlPastevalues, , , )
    End With

其余的代码没有.pastespecial行,所以这就是为什么我没有复制这里的所有内容,除了我遇到的问题。现在我没有以下格式,因为我在最后粘贴现有数据的值,所以我只是添加数据(更多行)。现有格式,这就是为什么我不想搞砸它。

 Worksheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues 

此外,如果有人也可以提出不同的方法来做过滤器让我知道。我的当前代码仅在我的范围是表格时才有效,所以如果我不为它创建表格,它将失败。我的数据是从A1到R,有一个标题。如果不将其设置为表格,它将从B2过滤,它将有错误的过滤器。见下文。当我进行过滤和复制时,我不需要将标题复制到现有数据中。

enter image description here

1 个答案:

答案 0 :(得分:1)

我可以想到一些方法,但是如果不改变现有代码,你可以分割复制粘贴方法。除非你在谈论大数据集,否则它应该不是问题。

Set ws1 = Worksheets("AT")
Set ws2 = Worksheets("BT")
lr1 = ws1.Cells(ws1.Rows.Count, "B").End(xlUp).Row
lr2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row + 1
With ws1.Range("B2", "R" & lr1)
    .AutoFilter Field:=1, Criteria1:="#N/A"
    .Copy
End With
ws2.Cells(lr2, "A").PasteSpecial xlPasteValues
Application.CutCopyMode = False