复制autofiltered范围,VBA的Excel
我写了下面的代码:
- 将自动筛选应用于所选
workbook
中的特定workbook
- 将除
autofiltered range
之外的数据复制到另一个workbook
这里是代码:
m = 2 For i = 1 To work_book.Worksheets.Count With work_book.Sheets(i) If (.UsedRange.Rows.Count > 1) Then 'apply filters .UsedRange.AutoFilter field:=2, Criteria1:=array_of_account_numbers, Operator:=xlFilterValues .UsedRange.AutoFilter field:=1, Criteria1:=array_of_debit_or_credits, Operator:=xlFilterValues 'select only visible cells after autofilter is applied On Error Goto am = destination_workbook.Sheets(1).UsedRange.Rows.Count + 1 Intersect(.UsedRange, .UsedRange.Offset(1)).SpecialCells(xlCellTypeVisible).Copy destination_workbook.Sheets(1).Range("A" & m) a: End If End With
但是,macros持续复制一些垃圾。 这意味着除了autofiltered range
外,它还会从每个sheet
前三rows
复制。
我该如何解决这个问题? 我会感谢您的帮助和答案。
编辑
这是工作表中数据的示例
filter应用于Criteria1(<> 60,<> 50)和Criteria2(<> 1470,<> 1450)
.UsedRange
将获取源表单上的所有数据,而不仅仅是自动筛选结果下面的数据。
您在Intersect...Copy
语句中使用的Offset
应该是您要忽略的自动筛选结果上方的行数,而不是值1。
如果你知道你有多less个标题行:
numHeaderRows = 5 For i = 1 To work_book.Worksheets.Count With work_book.Sheets(i) If (.UsedRange.Rows.Count > 1) Then 'apply auto-filters starting at the row directly above the start of the data. .UsedRange.Offset(numHeaderRows-1).AutoFilter field:=2, Criteria1:=array_of_account_numbers, Operator:=xlFilterValues .UsedRange.Offset(numHeaderRows-1).AutoFilter field:=1, Criteria1:=array_of_debit_or_credits, Operator:=xlFilterValues 'select only visible cells after autofilter is applied On Error Goto am = destination_workbook.Sheets(1).UsedRange.Rows.Count + 1 Intersect(.UsedRange, .UsedRange.Offset(numHeaderRows)).SpecialCells(xlCellTypeVisible).Copy destination_workbook.Sheets(1).Range("A" & m) a: End If End With Next