【发布时间】:2021-11-27 16:09:10
【问题描述】:
仍在学习绳索,所以请耐心等待!我有一个每月数据转储,它将被复制到工作簿中,它始终采用相同的格式。我正在尝试编写一个宏,该宏使用工作簿中另一个工作表中的名称列表来过滤预设列中的数据。理想情况下,我希望能够从列表中添加或删除名称。过滤后,我希望它复制所有可见的单元格并将它们粘贴到新工作表中。
我开始使用自动过滤器,然后使用计数数组,但我收到一个错误并且它没有过滤。因为过滤器应用于工作表,但它似乎无法查找实际名称,并且只返回空白。 它似乎确实在我的动态列表中计算了正确的名称数量......所以我会接受。
所以示例数据: 工作表:名称
工作表:书籍
理想情况下,代码从“姓名”中的“人员”列中获取姓名列表,查看“姓名”列“书籍”,找到每个匹配项,然后将整行复制并转储到新工作表中。
这是我写东西的最佳尝试。
Sub FilterName()
Dim i As Long
Dim lastrow As Long
Dim arrSummary() As Variant
With ThisWorkbook.Sheets("Names")
lastrow = .Cells(Rows.Count, "B").End(xlUp).Row
ReDim arrSummary(1 To lastrow)
For i = 1 To lastrow
arrSummary(i) = .Cells(i, 1)
Next
End With
For i = LBound(arrSummary) To UBound(arrSummary)
With ThisWorkbook.Sheets("Books")
.Range("F:F").AutoFilter Field:=1, Criteria1:=arrSummary(i), Operator:=xlFilterValues
.ThisWorkbook.Sheets("Books").Range("A1:AA100000").SpecialCells(xlCellTypeVisible).Copy
'Getting error 438 here
.ThisWorkbook.Sheets("Loans").Paste
End With
Next i
End Sub
我确实考虑过高级过滤器,但即使在 VBA 之外也无法使其工作,然后不想做查找路线,因为觉得它很笨重...不过愿意探索这些选项。
干杯:)
【问题讨论】:
-
Range("F:F")之前需要一个句号 -
谢谢,已更新。我的视力不是我想象的那样!
-
您必须删除 AutoFilter-Row 下方“ThisWorkbook”之前的句点
标签: excel vba dynamic autofilter