ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 662|回复: 1

[求助] 如何获取筛选中类型是日期的内容

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-4-26 23:04 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 FlamesTsui 于 2017-4-26 23:08 编辑

我有一个表,2个Sheet
两个表数据是对应的,一个是描述,一个是日期。我想实现筛选日期,另外一个表同步筛选。
但是找了很多资料。都毫无头绪。
我设想的方案
获取Sheet2筛选的内容。但是需要问题。
无法获取到日期类型的筛选数据
参考:http://club.excelhome.net/forum. ... =thread&tid=1274662


Sub lqxs()
    Dim r%, Arr1(), i&, j&, n&, Arr2()
    Dim fl As Filter


   'MsgBox AutoFilter.ShowAllData

    With Sheet1
        If .AutoFilterMode Then
            For Each fl In .AutoFilter.Filters
                If fl.On Then
                    r = r + 1
                    ReDim Preserve Arr1(1 To r)
                    'MsgBox fl.Operator
                    'If fl.Operator = Then MsgBox 1
                    'Arr1(r) = fl.Criteria1
                    If fl.Operator = xlFilterValues Then
                        Dim varCriteria2 As Variant
                        With ActiveSheet.AutoFilter.Filters(3)
                          '**********************************************************************
                          'Returns Runtime error 1004 Application defined or object defined error
                          varCriteria2 = .Criteria2
                          '**********************************************************************
                          For i = LBound(varCriteria2) To UBound(varCriteria2)
                            MsgBox varCriteria2(i)
                          Next i
                        End With
                        Arr2() = fl.Criteria2
                    End If
                End If
            Next
        End If
    End With

   'MsgBox AutoFilter.ShowAllData()

    [h:h].ClearContents
    [h22] = "筛选条件": n = 22

    If r = 0 Then MsgBox "没有筛选。": Exit Sub
    For j = 1 To r
        If IsArray(Arr1(j)) Then
            For i = 1 To UBound(Arr1(j))
                n = n + 1
                Cells(n, 8) = Arr1(j)(i)
            Next
        Else
            n = n + 1
            Cells(n, 8) = Arr1(j)
        End If
    Next
End Sub


在获取Criteria2时,就错误1004了。
http://club.excelhome.net/forum. ... 1274662&pid=8667874这个说的
在日期勾选多个值的筛选方式下,Criteria1和Criteria2 都是空,仅有Operator。筛选条件不知道保存在哪里了。
请问,有没有高手知道啊。
发现一篇文章说的是,可以从xml中读取筛选内容。在打开的文件读取本身的xml这简直。。。

获取筛选条件-待补充代码0919.rar (26.23 KB, 下载次数: 0)
要实现的.rar (26.39 KB, 下载次数: 1)

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-4-27 22:27 | 显示全部楼层
我找到一个变通方法。
在Sheet2增加一个按钮之类。双击后
枚举Sheet2显示的内容,在Sheet1显示指定的。
Private Function CheckAutoFilter(ByVal Op As Boolean)
    Dim i As Integer, j As Integer
    Dim LastRow As Integer
    Dim Tmp() As String
   
    If Op = False Then
        Sheets(1).Range("$A$2:$AE$123").AutoFilter 1
    Else
        LastRow = Sheets(ActiveSheet.Index).[A65536].End(xlUp).Row
        
        j = 0
        ReDim Tmp(j)
        
        For i = 3 To LastRow
            If Rows(i).Hidden = False Then
                j = j + 1
                ReDim Preserve Tmp(j)
                Tmp(j) = Cells(i, 1).Value
            End If
        Next
        
        Sheets(1).Range("$A$2:$AE$123").AutoFilter Field:=1, Criteria1:=Array(Tmp), Operator:=xlFilterValues
    End If
End Function
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 17:12 , Processed in 0.035727 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表