将过滤的数据复制到新工作簿的问题

时间:2017-04-08 18:36:42

标签: excel vba copy paste

我使用此代码过滤数据库,然后将生成的过滤数据复制到第二个工作簿中的工作表。

 With ws_sched
    Set srng = .Range(.Cells(1, 1), .Cells(.Range("A" & Rows.count).End(xlUp).row, .Cells(1, Columns.count).End(xlToLeft).Column))
        srng.AutoFilter _
        Field:=2, _
        Criteria1:=trgt_date, _
        VisibleDropDown:=False
    'srng.SpecialCells(xlCellTypeVisible).Copy ws_data.Range("A1")
    srng.Copy
    ws_data.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    If .AutoFilterMode Then .AutoFilterMode = False
End With

'ws_sched'是过滤的原始数据库。 'ws_data'是第二个工作簿中的目标工作表。

过滤器有效,但复制和粘贴仅留下源数据库的标题行(多行过滤数据的第一行)。

是否有人能够帮我解决为什么我的过滤数据没有被转移的问题?

以上代码反映了我根据对Thiago建议的理解,对原始代码所做的更改。这仍然只复制标题行,没有过滤数据。

3 个答案:

答案 0 :(得分:0)

尝试粘贴复制的数据,而不是像现在一样通知目的地

答案 1 :(得分:0)

您必须只有ws_sched列A中的标题,即为srng提供行深度的标题,因此设置为1行range

您可以在Msgbox srng.Address

之后添加一些Set srng =...语句来证明这一点

所以你有两种方式:

  • 选择其他列以从

    获取数据行 depth

    在这种情况下,我会选择专栏" B"因为这是你似乎想要过滤的那个

    Set srng = .Range(.Cells(1, 1), .Cells(.Range("B" & Rows.Count).End(xlUp).row, .Cells(1, Columns.Count).End(xlToLeft).Column))
    
  • 通过UsedRange

    推断数据行 depth

    在这种情况下,您只需要更改复制语句,如下所示:

    Intersect(.UsedRange, .Columns(2).EntireRow, srng.EntireColumn).SpecialCells(xlCellTypeVisible).Copy ws_data.Range("A1")
    

最后,您可能会遇到A列完全空白的情况,即甚至没有标题。在这种情况下,您应该将所有代码转移到B列

        Set srng = .Range(.Cells(1, 2), .Cells(.Range("B" & Rows.Count).End(xlUp).row, .Cells(1, Columns.Count).End(xlToLeft).Column))
            srng.AutoFilter _
            Field:=1, _
            Criteria1:=">=2", _
            VisibleDropDown:=False
        srng.SpecialCells(xlCellTypeVisible).Copy ws_data.Range("A1")

答案 2 :(得分:0)

此VBA代码将帮助您将过滤后的数据导入其他工作表。

Sub copy_filtered_data()

工作表("数据输入")。UsedRange.SpecialCells(xlCellTypeVisible).Copy _ Destination:=工作表("结果")。范​​围(" A1" )

End Sub

注意:你也可以使用Autofilter代码。