将过滤后的记录复制到新的临时表

时间:2018-02-15 11:12:28

标签: vba excel-vba excel

我正在尝试将一些已过滤的记录复制到同一个Excel中的新工作表中。但是,它只是复制标题而不是记录。请建议。我已经将nc_it_an_sub定义为放入自动过滤器后显示的记录数。

Workbooks("WB1.xlsx").Worksheets("Sheet1").Range("A2:N" & nc_it_an_sub).Select
Selection.Copy
Workbooks("WB1.xlsx").Worksheets("Temp Sheet").Range("A1").PasteSpecial Paste:=xlPasteValues

2 个答案:

答案 0 :(得分:0)

试试这样:

nc_it_an_sub = 10
Workbooks("WB1.xlsx").Worksheets("Sheet1").Range("A2:N" & nc_it_an_sub).Select
Selection.Copy
Workbooks("WB1.xlsx").Worksheets("Temp Sheet").Range("A1").PasteSpecial _
                                                         Paste:=xlPasteValues

如果有效,那么在您的情况下nc_it_an_sub获得1的价值,这应该是固定的。

一般情况下,您无需使用Select即可Copy范围:

Workbooks("WB1.xlsx").Worksheets("Sheet1").Range("A2:N" & nc_it_an_sub).Copy
Workbooks("WB1.xlsx").Worksheets("Temp Sheet").Range("A1").PasteSpecial _
                                                         Paste:=xlPasteValues

或甚至作为1-liner:

Worksheets("Source").Columns("A:D").Copy Destination:=Worksheets("Target").Range("a1")

答案 1 :(得分:0)

您可以只复制可见细胞。

作为示例,将此代码添加到Worksheet模块中 这段代码并不重要 - 当您双击单元格时,它会创建一个过滤器 它会将当前区域过滤到您双击的值。

Private rCellClicked As Range

'Code to create a filtered range.  
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    With ActiveSheet
        If .FilterMode Then
            .ShowAllData
            rCellClicked.Select
        Else
            With Target
                .CurrentRegion.AutoFilter Field:=.Column - .CurrentRegion.Column + 1, Criteria1:=.Value
            End With
            Set rCellClicked = Target

            'This procedure will copy the cells to a new sheet.
            CopyFiltered Target.CurrentRegion

        End If
    End With

End Sub  

此过程将已过滤列表中的可见单元格(包括标题)复制到新工作表中的范围A1:

Public Sub CopyFiltered(FilteredRange As Range)

    Dim wrkSht As Worksheet

    Set wrkSht = ThisWorkbook.Worksheets.Add

    FilteredRange.SpecialCells(xlCellTypeVisible).Copy Destination:=wrkSht.Range("A1")

End Sub