我有一个名为"Staffdb“的工作表,其中有两个名为"PermTBL”和"StaffTBL“的表,以及相同的标题"Girls”、"ID“、"Hire_date”和"Status“。所有当前和历史上的员工都在PermTBL中。我想在"A“表示活动的状态字段上筛选PermTBL,然后将这些内容复制到空的StaffTBL中。在用状态向下箭头手动过滤PermTBL并选择"A“后,我开始测试代码,并得到一个明显的部分副本。我的代码是选项显式的
子PermTBLtoStaffTBL()
Dim rgnsrc As Range Dim rgndest Range
Set rgnsrc = Worksheets("Staffdb").Range("PermTBL")
Set rgndest = Worksheets("Staffdb").Range("StaffTBL")
rgnsrc.SpecialCells(xlCellTypeVisible).Copy rgndest结束子对象
最后,作为一条附加信息,StaffTBL似乎有隐藏的行,3-7不可见,这似乎与我丢失的数据相对应。我试图揭开它的面纱,但无济于事。关于下一步该去哪里的建议?我必须遍历这个表,还是我在目的地犯了一个错误?这是个新手,第三世界的网速,再加上无法派人送书,这使得这一过程变得单调乏味。请耐心等待NewBee。
一条新的信息,我发现如果我取消隐藏整个工作表,正确的数据会出现在StaffTBL中,当然PermTBL的过滤器也会消失,所以很明显我是在正确的轨道上。我仍然希望通过编程(而不是手动)过滤PermTBL的意见和建议。我会继续搜索网站,但任何建议都是非常感谢的。
发布于 2018-05-05 21:15:32
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更新
https://stackoverflow.com/questions/50189720
复制相似问题