ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如可获取所有筛选条件

如可获取所有筛选条件

作者:绿色风 分类: 时间:2022-08-17 浏览:140
楼主
罗刚君
Q:工作表中是否处于筛选状态,通过行标题的颜色可以快速地判断。然而想知道表中设置的具体筛选条件该如何处理?如果有多个条件必须一并取出来
A:草兄用公式实现取筛选条件,不过那是针对“=XX”的,而对于“<XX”和“>XX”则不行,而且筛选条件有多个时更不行。利用VBA可以完美的解决这个问题
  1. Sub 获取筛选条件()
  2.   On Error Resume Next
  3.   Dim str As String
  4.   With ActiveSheet  '引用工作表
  5.     If .AutoFilterMode Then  '如果处于筛选模式下
  6.       For i = 1 To .AutoFilter.Filters.Count  ' 遍历每一个筛选对象
  7.         '如果该列有筛选条件,那么报告两个筛选的条件(若只有一个,第二个条件显示为空白)
  8.         If .AutoFilter.Filters(i).On Then
  9.           str = .AutoFilter.Filters(i).Criteria2
  10.           If Err = 0 Then
  11.             MsgBox "第" & i & "列筛选条件为:" & Chr(10) & .AutoFilter.Filters(i).Criteria1 & Chr(10) & .AutoFilter.Filters(i).Criteria2
  12.           Else
  13.             MsgBox "第" & i & "列筛选条件为:" & Chr(10) & .AutoFilter.Filters(i).Criteria1
  14.           End If
  15.           Err.Clear
  16.         End If
  17.       Next
  18.     End If
  19.   End With
  20. End Sub

 


   
 
筛选.rar
2楼
monvzhilei
罗版出手,就像金庸武侠小说里面的绝世高手。哈哈
3楼
罗刚君
如果工作表处理筛选模式下,VBA判断语句为“ If ActiveSheet.AutoFilterMode ”,这是防错的必然手段
而对于筛选的条件个数,没有直接的方法,所以先引用第二个条件
str = .AutoFilter.Filters(i).Criteria2
如果有错误,那么表示只有一个条件
使用以下语句:
MsgBox "第" & i & "列筛选条件为:" & Chr(10) & .AutoFilter.Filters(i).Criteria1


最后一个问题是筛选区域有很多列,但并非每列都有筛选条件,所以使用循环进行判断
AutoFilter.Filters(i).On 其中On表示有筛选条件
___________________________________________________________
初充:我发现WPS在这方面做得更好,可以直接使用“ .AutoFilter.Filters(i).Criteria1 & Chr(10) & .AutoFilter.Filters(i).Criteria2”
如果第二个条件不存在,WPS将它当成空文本处理,这比Excel人性化一些
4楼
天南地北
看看罗版的大作!
5楼
lcf
学习,必须的
6楼
lcf
学习   必须的

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap