设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4738|回复: 12
打印 上一主题 下一主题

[模块/函数] 窗体多条件筛选函数

[复制链接]
跳转到指定楼层
1#
发表于 2008-1-25 12:39:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Function GetFilterStr(strFilter As String, strField As String, intType As Integer, varArg As Variant) As String
'调用的时候需要传递窗体的原筛选条件, 新筛选条件的字段, 字段的类型(数字, 字符串, 日期, 新筛选条件的参数)
    Dim strNewFilter As String
    Dim aryFilter As Variant
    Dim strFilterSplitted As String
    Dim intCount As Integer
    Dim intUbound As Integer
    intUbound = -1
    aryFilter = Split(strFilter, "AND") '以AND为间隔分离原窗体的筛选条件
    intUbound = UBound(aryFilter)
    For intCount = 0 To intUbound
        strFilterSplitted = Trim(aryFilter(intCount))
        If Left(strFilterSplitted, 1) = "#" Then
            aryFilter(intCount) = Trim(aryFilter(intCount - 1)) & " AND " & strFilterSplitted
            aryFilter(intCount - 1) = ""
            strFilterSplitted = Trim(aryFilter(intCount))
        End If
'对于日期型条件由于有BETWEEN...AND..., 所以将AND后面的日期参数和前面的条件再重新合并.

        If InStr(strFilterSplitted, strField) > 0 Then
            aryFilter(intCount) = ""
            If InStr(strFilterSplitted, "#") > 0 Then
                aryFilter(intCount + 1) = ""
            End If
        End If
'判断原筛选条件是否有包含新的筛选字段, 如果有, 则删除原条件中相关的字段参数, 如果是日期型的还要删除下一条(AND后面的日期参数)
    Next
    Select Case intType        '数字,字符,日期
    Case 1    '数字型
        If varArg > 0 Then
            strNewFilter = strField & "=" & varArg
        Else
            strNewFilter = ""
        End If
    Case 2    '字符串型
        If varArg = "所有" Then
            strNewFilter = ""
        Else
            strNewFilter = strField & "='" & varArg & "'"
        End If
    Case 3    '日期类型1
        If varArg = "所有" Then
            strNewFilter = ""
        Else
            strNewFilter = strField & " between " & varArg
        End If
    End Select
'根据不同的类型生成新的筛选条件. 对于数字型参数0表示所有, 对于字符串型和日期型传递"所有"表示显示所有,

    If Len(strNewFilter) > 0 Then
        GetFilterStr = strNewFilter
    End If
    For intCount = 0 To intUbound
        strFilterSplitted = Trim(aryFilter(intCount))
        If Len(strFilterSplitted) > 0 Then
            GetFilterStr = strFilterSplitted & " AND " & GetFilterStr
        End If
    Next
    GetFilterStr = Trim(GetFilterStr)
    If Right(Trim(GetFilterStr), 3) = "AND" Then
        GetFilterStr = Trim(Left(GetFilterStr, Len(GetFilterStr) - 3))
    End If
'合并原筛选条件, 生成新的筛选条件

End Function

评分

参与人数 1经验 +5 收起 理由
cuxun + 5 支持原创

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2008-1-25 13:20:57 | 只看该作者
不错,收藏了,谢谢分享
3#
发表于 2008-1-25 23:43:22 | 只看该作者
谢谢分享
4#
 楼主| 发表于 2008-1-26 09:03:48 | 只看该作者
分享的是快乐的~~~~~~~~~
5#
发表于 2008-1-26 15:41:56 | 只看该作者
能给个库下载收藏吗?
6#
发表于 2008-1-27 12:35:23 | 只看该作者
谢谢了,学习了
7#
发表于 2008-2-3 20:14:33 | 只看该作者
学习中~~~~~~~~
8#
发表于 2008-2-3 21:11:12 | 只看该作者
没看懂,,正想问ACCESS中能否实现像EXCEL中的自动筛选,,这个是不是可以啊?怎么用...
9#
发表于 2008-8-20 21:41:37 | 只看该作者
函数是不错,只是不怎么会用,,,能说说怎么调用吗????

能给个例子就好了,,,,[:30]
10#
发表于 2009-10-12 20:58:29 | 只看该作者
谢谢分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-15 08:42 , Processed in 0.085152 second(s), 37 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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