2016-09-16 23 views
0

使用此代码我简单地(感谢Slai)将筛选范围从一个工作表复制并粘贴到另一个工作表。不过,我试图通过将另一个过滤的范围附加到HAA工作表来复制此代码,但由于某种原因它选择了第11行并粘贴了数据。将筛选范围追加到工作表

Sub Run() 

    Application.ScreenUpdating = False 

    Dim x As Long 
    Dim rf As Range, wsTo As Worksheet, wx As Range 

    Set rf = ThisWorkbook.Sheets("Table").UsedRange 
    Set wsTo = Sheets("HAA") 
    Set wx = ThisWorkbook.Sheets("HAA").UsedRange 

    x = Range("B" & Rows.Count).End(xlUp).Row 

    rf.AutoFilter 
    rf.AutoFilter 12, "associated" 
    rf.Copy 

    wsTo.Range("A1").PasteSpecial xlPasteValues 

    rf.AutoFilter 
    rf.AutoFilter 12, "not found" 
    rf.Offset(1, 0).Copy 

我改变了这个(下)选择要看到它被粘贴的数据,原本.PasteSpecial xlPasteValues

wsTo.Range("A1" & x).Select 

    Application.ScreenUpdating = True 

End Sub 
+0

什么工作是你想获得最后的填充行(例如** x **)来自?为什么不抵消获得第一个可用的空白单元格?例如'x = wsTo.Range(“B”&Rows.Count).End(xlUp).OFFSET(1,0).Row'它看起来应该是'wsTo.Range(“A”&x).Select' 。 – Jeeped

+0

你会添加一些输入和期望结果的例子吗? – user3598756

+0

@Jeeped x = wsTo.Range(“A”&Rows.Count).End(xlUp).Offset(1,0).Row 这样,它会粘贴现有数据。 – FonR

回答

0

最后一排后粘贴,这样的:

Dim rangeTo As Range 
Set rangeTo = wsTo.UsedRange ' or = wsTo.Range("A1").CurrentRegion 
Set rangeTo = rangeTo.Offset(rangeTo.Rows.Count)(1) ' (1) is to get the first cell 
Application.Goto rangeTo ' optional if you want to see where the values will be pasted 
rangeTo.PasteSpecial xlPasteValues 

代码中的问题是,在粘贴和过滤数据之前,您会得到最后一行。此外,Range(通常是指当前活动的表可能并不总是你想要的,所以最好到指定范围之前的纸张:

x = wsTo.Range("B" & wsTo.Rows.Count).End(xlUp).Row 
+0

现在我得到了rangeTo.PasteSpecial xlPasteValue 所需的对象,但我认为在执行此操作之前已经识别出它。 – FonR

+0

@FonR在粘贴之前是否忘记复制数据? – Slai

+0

给我一点时间想想这个。 – FonR