设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3056|回复: 7
打印 上一主题 下一主题

[窗体] 如何遍历窗体控件判断其条件格式状态

[复制链接]
跳转到指定楼层
1#
发表于 2013-9-10 14:35:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
20金钱
本帖最后由 lazybird 于 2013-9-10 14:40 编辑

对窗体每个文本框设置了条件格式, 输入合格数据则不变色,不合格则变成红色
在输入完数据后能否通过判断文本框背景颜色的方法得到综合结果?

做了个例子没有实现想要的功能,高手们帮看看代码怎么改.谢谢了


==================不知道为什么发不了附件 ,贴上代码吧,很简单几行

  Dim ctrl As Control
   
    For Each ctrl In Me.Controls
              If ctrl.ControlType = acComboBox Or ctrl.ControlType = acTextBox Then
                       If ctrl.BackColor = 255 Then
                       MsgBox "Fail", vbOKOnly
                       Exit Sub
                       End If
               End If
    Next

最佳答案

查看完整内容

如果还有比较复杂的设置可以按照以下思路进行处理: Dim ctrl As Control Dim f As FormatCondition For Each ctrl In Me.Controls If ctrl.ControlType = acComboBox Or ctrl.ControlType = acTextBox Then If ctrl.FormatConditions.Count = 1 Then '设置有一个条件格式的控件 Set f = ctrl.FormatConditions(0) '获取这个条件格式对象 ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2013-9-10 14:35:28 | 只看该作者
本帖最后由 todaynew 于 2013-9-12 10:28 编辑

如果还有比较复杂的设置可以按照以下思路进行处理:

    Dim ctrl As Control
    Dim f As FormatCondition
    For Each ctrl In Me.Controls
        If ctrl.ControlType = acComboBox Or ctrl.ControlType = acTextBox Then
            If ctrl.FormatConditions.Count = 1 Then          '设置有一个条件格式的控件
                Set f = ctrl.FormatConditions(0)                  '获取这个条件格式对象
                If f.Type = acFieldValue Then                     '类型为:字段值
                    Select Case f.Operator                           '连接符为:等于
                        Case acEqual
                            If ctrl.Value = Eval(f.Expression1) Then '判断条件格式中设置的值是否与当前值相等
                                MsgBox "不合格", vbOKOnly
                                Exit Sub
                            End If
                       '请自行琢磨其他f.Operator的处理方法
                    End Select
                End If
            End If
        End If
    Next
回复

使用道具 举报

3#
发表于 2013-9-10 16:26:47 | 只看该作者
回复

使用道具 举报

4#
发表于 2013-9-10 16:41:44 | 只看该作者
本帖最后由 todaynew 于 2013-9-10 16:59 编辑

不能这样判断。可以用条件格式的的Type、Operator、Expression1和Expression2四个属性与当前值比较做出判断,不过这样处理很麻烦。还不如直接列出所有控件的公式进行逐一判断为佳。
回复

使用道具 举报

5#
 楼主| 发表于 2013-9-10 17:08:00 | 只看该作者
呵呵,就是觉得太麻烦了阿,特别是窗体上有几百项参数的时候.执行一次等很久,用户体验很差阿.
把附件发上来清楚点,版主应该是明白我的问题了.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

6#
发表于 2013-9-12 09:39:15 | 只看该作者
本帖最后由 todaynew 于 2013-9-12 09:43 编辑
lazybird 发表于 2013-9-10 17:08
呵呵,就是觉得太麻烦了阿,特别是窗体上有几百项参数的时候.执行一次等很久,用户体验很差阿.
把附件发上来 ...

如果都是这么简单的条件格式,倒是可以这样搞法:
    Dim ctrl As Control
    Dim f As FormatCondition
    For Each ctrl In Me.Controls
        If ctrl.ControlType = acComboBox Or ctrl.ControlType = acTextBox Then
            If ctrl.FormatConditions.Count = 1 Then '设置有一个条件格式的控件
                Set f = ctrl.FormatConditions(0)    '获取这个条件格式对象
                If ctrl.Value = Eval(f.Expression1) Then '判断条件格式中设置的值是否与当前值相等
                    MsgBox "不合格", vbOKOnly
                    Exit Sub
                End If
            End If
        End If
    Next
回复

使用道具 举报

7#
发表于 2013-9-12 10:39:16 | 只看该作者
如果条件格式类型特别多,则枚举各种条件格式的处理方式就不合算,这种情况下可按以下方式处理:
  Dim B As Boolean
    B = True
    B = B And Me.Text0.Value = "良好"
    B = B And Me.Text2.Value = "合格"
    B = B And Me.Text4.Value = "合格"
    If B = False Then
        MsgBox "不合格", vbOKOnly
        Exit Sub
    End If
回复

使用道具 举报

8#
 楼主| 发表于 2013-9-13 11:44:38 | 只看该作者
todaynew 发表于 2013-9-12 10:25
如果还有比较复杂的设置可以按照以下思路进行处理:

    Dim ctrl As Control


按照版主的方法改了程序,遍历200个控件基本感觉不到延时。
之前用的办法是用Dlookup的办法逐一到另一个表里读取上下限,会有几秒钟的延迟,现在基本完美解决了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-21 08:48 , Processed in 0.094198 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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