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 

此外,如果任何人也可以build议一个不同的方式来做滤波器让我知道。 我目前的代码只适用于我的范围是一个表,所以如果我不创build一个表,它会失败。 我的数据是从A1到R,并有一个标题。 没有将它设置为表,它将从B2中过滤,它将有错误的filter。 见下文。 当我筛选和复制时,我不需要将标题复制到我现有的数据。

在这里输入图像说明

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

 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