Excel VBA过滤被忽略

时间:2018-05-29 19:34:30

标签: excel vba excel-vba

我使用Excel 2016 VBA代码运行了一些场景,并遇到了一个我似乎无法解决的问题。所以,下面的代码执行此操作:

  
      
  1. 删除工作表上的所有现有过滤器"数据"
  2.   
  3. 在表格上为表格应用新的过滤器"数据"以便   栏"位置"将根据细胞" G2"过滤价值(即"南")+列"数量"将包含仅非空白
  4.   
  5. 选择现在过滤的数据范围+复制选择(屏幕截图中突出显示的整个潜在范围 - 即E5:F12)
  6.   
  7. 激活工作表" Transit"并进入第一个空单元格   突出显示范围(A4:A10)
  8.   
  9. 执行粘贴值+取消激活过滤   上一页
  10.   

但它有效,但有一个重要的例外(如果重要的是,我从工作表Transit启动代码)

在无需复制的情况下,它会复制所有内容(即整个"Data_range"。基于下面的截图,当位置"南"过滤后,没有非空行"数量"。在这样的场景中,它不是复制粘贴,而是反过来并且复制粘贴整个范围而不进行过滤。

我无法手动执行此类过程 - 是否有办法停止代码,以防万一找不到过滤匹配?还有其他方法可以避免这种过度粘贴吗?

Sub Copy()

    On Error Resume Next
    Worksheets("Data").ShowAllData

    With Sheets("Data")
    .Range("Items").AutoFilter Field:=2, Criteria1:=.Range("G2").Value
    .Range("Items").AutoFilter Field:=5, Criteria1:="<>"    

    Application.Goto Reference:="Data_range"
    Selection.Copy

    Worksheets("Transit").Activate

    For Each cell In Range("First_empty_row").Cells
    If IsEmpty(cell) = True Then cell.Select: Exit For
    Next cell

    Selection.PasteSpecial Paste:=xlPasteValues

    .Range("Items").AutoFilter Field:=2
    .Range("Items").AutoFilter Field:=5

End With
End Sub

documentation

0 个答案:

没有答案