当前位置:   article > 正文

VBA-Range.AutoFilter 方法浅析_autofilter field

autofilter field

VBA-Range.AutoFilter 方法的一些“坑”

学到筛选的时候遇到一些小小的“坑”,记录下。

  • 录制出来的宏是这样的,
Sub1()
' 宏1 宏
    Rows("1:1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$F$1048").AutoFilter field:=4, Criteria1:="财务部"
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
    Sheets("财务部").Select
    Range("A1").Select
    ActiveSheet.Paste
End Sub
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • Criteria1
    自己手动写这段代码的时候,Criteria1写成Criterial,一运行就出错了。
    报错提示
    查了好久没发现问题,后来上网查才知道,Criteria1后面是阿拉伯数字1!Criteria1后面是阿拉伯数字1!Criteria1后面是阿拉伯数字1!
      

  • ??.SpecialCells
    .SpecialCells可以很明显看出,这是选特定单元格的,但是前面怎么写呢?
    录制的代码是这样,非常啰嗦,那么自己写怎么写呢?

 Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
  • 1
  • 2
  • 3
  • 4

琢磨很久,摸索出几种写法
(1)粗暴的把所有数据都写上

Range("a1:f1048").AutoFilter field:=4, Criteria1:="销售2部"
Range("a1:f1048").SpecialCells(xlCellTypeVisible).Select
Selection.Copy Sheet10.Range("a1")
'可以简写成下面
Sheet1.Range("a1:f" & k).AutoFilter field:=4, Criteria1:=sht.Name
Range("a1:f" & k).SpecialCells(xlCellTypeVisible).Copy Sheets(sht.Name).Range("a1")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(2)选一个单元格,筛选后默认就是选中筛选后的数据

Sheet1.Range("a1").AutoFilter field:=4, Criterial1:="销售2部"
Selection.SpecialCells(xlCellTypeVisible).Copy Sheet10.Range("a1")
  • 1
  • 2

(3)用with貌似更方便些

   Range("a1").Select
   With Selection
        .AutoFilter field:=4, Criteria1:="一车间"
        .SpecialCells(xlCellTypeVisible).Copy Sheets("一车间").Range("A1")
  • 1
  • 2
  • 3
  • 4

- 官方文档解析

查看了该方法的描述,很详细,更糊涂了 本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】

推荐阅读
相关标签