发现' TargetTable.Range.SpecialCells(xlCellTypeVisible).Copy _'目的地:=表(" Sheet8")范围(" A1&#34)

时间:2018-05-05 12:59:53

标签: excel-vba excel-tables vba excel

我有一张名为" Staffdb"有两个命名表" PermTBL"和#34; StaffTBL",相同的标题"女孩" " ID" " HIRE_DATE"和"状态"。所有现任和历史悠久的员工都在PermTBL。我想在状态字段中过滤PermTBL,以便" A"意思是活跃的,然后将这些复制到空的StaffTBL。使用状态向下箭头手动过滤PermTBL后,仅选择" A"我进去测试代码并获得明显的部分副本。我的代码是 选项明确

Sub PermTBLtoStaffTBL()

Dim rgnsrc As Range 昏暗的范围

Set rgnsrc = Worksheets("Staffdb").Range("PermTBL")
Set rgndest = Worksheets("Staffdb").Range("StaffTBL")
rgnsrc.SpecialCells(xlCellTypeVisible).Copy rgndest

End Sub

最后,作为附加信息,StaffTBL似乎有隐藏的行,3-7不可见,这似乎与我的遗漏数据相对应。我试图取消隐藏无济于事。关于下一步去哪里的建议?我必须在表格中循环还是在目的地中犯了错误?在这个和第三世界的互联网速度的新,以及无法交付书籍使这一个繁琐的过程。请忍受NewBee。

新的信息,我发现如果我取消隐藏整张纸的正确数据出现在StaffTBL中,当然PermTBL的过滤器也会消失,所以显然我是在正确的轨道上。仍然希望以编程方式(而不是手动)过滤PermTBL的评论和建议。我将继续搜索网站,但任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

Sub CopyData()

    Dim t As ListObject
    Dim t2 As ListObject

    Set t = ActiveSheet.ListObjects("PermTBL")
    Set t2 = ActiveSheet.ListObjects("StaffTBL")

    ' Remove all rows from StaffTBL table
    If Not t2.DataBodyRange Is Nothing Then
        t2.DataBodyRange.Rows.Delete
    End If

    ' Filter Status by "A"
    t.DataBodyRange.AutoFilter Field:=4, Criteria1:="A"
    ' Copy to first cell right below the table's header
    t.DataBodyRange.Copy t2.Range(1).Offset(1)
    ' Remove filter from PermTBL table
    t.DataBodyRange.AutoFilter

End Sub

<强>更新

Example workbook