会员登录 - 用户注册 - 网站地图 Office中国(office-cn.net),专业Office论坛
当前位置:主页 > 技巧 > Access技巧 > 窗体控件 > 正文

在ACCESS中扩展条件格式的功能

时间:2004-11-23 22:55 来源:AccessFaq 作者:Franknbs… 阅读:

作    者:朱亦文(译)  
摘    要:在 Microsoft access 中使用用户接口及通过编程创建条件格式。探讨在不同环境下扩展条件格式的编程方法。

正    文:

Frank C. Rice著 朱亦文译
Microsoft 公司 

2002年3月 

应用于: Microsoft® access 2000 及以后版本 

摘  要: 在 Microsoft access 中使用用户接口及通过编程创建条件格式。探讨在不同环境下扩展条件格式的编程方法。 

简介
    自 Microsoft® access 2000 开始,能够在 combo box 和 text box 控件上应用条件格式。这将允许按指定的条件改变包括在这些控件中的数据的原始显示特性,如背景色和加粗。 

    有两个方法创建和应用条件格式。其一,可以先选择控件,然后在[ 格式 ]菜单上点击[ 条件格式 ]。其二,使用 Microsoft Visual Basic® for Applications (VBA),也能创建使用条件格式的[ FormatCondition ]对象实例并把它们加入到[ FormatCondition ]对象集合中。 

    每个做了条件格式的控件最少有两个格式--一个默认格式和一个当指定条件为 True 时的指定格式。一个控件可以有多至三个的指定格式条件。这三个条件的限制可由 VBA 代码编程在不同的环境下确定条件的值来克服。本文第一个示例将通过用户界面来创建条件格式。我们将会看到在运行时使用 VBA 代码来创建条件格式改变格式条件这种更好的方法。

通过用户界面创建条件格式
    在<格式>菜单上的<条件格式>菜单提供一个简单的方法创建和应用多至三个条件格式。当点击<格式>菜单上的<条件格式>,将出现<条件格式>对话框,如图:

按此在新窗口浏览图片

图 1. <条件格式>对话框

    <默认格式 Default Formatting>区域显示控件在没有使用任何指定条件的情况下的格式。<条件 1 Condition 1>区域允许添加指定的条件格式。当要添加条件格式时,点击[ 添加 Add ]按钮,对话框将最多扩展至三个条件格式。 

    <条件格式>对话框提供六个格式控件来帮助指定每一个条件格式。从控件行的最左侧开始,有加粗、斜体、下划线、背景色以及前景色,最后一个是控件控件的启用状态(允许和禁止)。在最左边的下拉列表框允许选择<字段值为>、<表达式为>或者<字段有焦点>。也能通常操作符如:相等(=)、大于(>)、位于区间(Between)及更多。如果在一个计算字段上应用条件格式,必须使用标准的 VBA 操作符书写表达式。 

    如果格式化条件要求一个表达式,可以使用表达式生成器来帮你建立表达式。 

    图 2 举例说明在一个窗体中使用条件格式格式化与之相关的 Special Customer 文本框。

按此在新窗口浏览图片

图 2. 显示通过用户接界面创建的格式化了的窗体

    基于 Total 文本框的值作为格式化条件改变背景色。在该情形中,如果 Total 文本框的计算值介于 300 到 399 之间,文本框显示为绿色。图3 举例说明在<条件格式>对话框中定义条件。

按此在新窗口浏览图片

图 3. 基于 Total 文本框值定置的格式化对话框 

条件格式编程
    当能够非常熟练的使用<条件格式>对话框创建条件格式后,在这个时期,可能想使用 VBA 代码了。通过使用代码创建条件格式,能管理条件格式,用户就会发现可以超过允许的三个条件格式。也可能想在多个应用程序或多个窗体中使用条件格式。在代码中产生条件,非常易于在不同的窗体中使用复制粘贴代码应用同样的格式。

    窗体上的每个组合框和文本框有一个包含对象的对象集合。该对象集合有(添加)和(删除)方法。对象有(修改)方法。对象没有名称属性,因此通常通过其索引值进行引用。另外,对象拥有诸如(类型)属性的属性设置,允许应用基于字段值或表达式的条件。有关于对象集合和对象的更详细的信息,请参看 Micosoft 开发者网络的帮助。 

    来看看另一个定置窗体及在其背后的代码,是如何通过编程来创建条件格式及如何提供附加格式选择。图 4 显示一个文本框中根据靶号确定格式的窗体。

按此在新窗口浏览图片

图 4. 基于用户选项应用条件格式的窗体

    在这个窗体中,用户在 Target 文本框中键入数字,并在 Choose an option 区域选择一选项(Option)。用户然后在 Result 文本框中键入数字并点击[Change]按钮。对于前面三选项,Result 文本框的值与 Target 文本框的值进行比较,并根据两个值是否是少于、等于、或大于另一个,格式化 Result 文本框的值。对于第四个选项,当点击[Change]按钮后,则按当前日期的星期与字符串 Sat 和 Sun 进行比较来确定 Result 文本框如何格式化。

下面是 Change 命令按钮的 Click 事件处理程序:


Private Sub cmdChange_Click()

   ' 这个子程序演示使用 FormatCondition 对象来添加一个文本框的格式。
   ' 也例举了通过 FormatConditions 集合扩展三个条件格式的功能限制。
   '
   ' 作者: Frank C. Rice
   '
   Dim objFrc As FormatCondition
   Dim lngRed As Long
   Dim lngWhite As Long
   Dim lngBlack As Long
   Dim lngYellow As Long

   ' 设置背景色和前景色
   lngRed = RGB(255, 0, 0)
   lngWhite = RGB(255, 255, 255)
   lngBlack = RGB(0, 0, 0)
   lngYellow = RGB(255, 255, 0)

   ' 移除任何已存在的条件格式
   Me.txtResult.FormatConditions.Delete

   ' 创建三个格式对象并将它们添加到 FormatConditions 集合中
   Set objFrc = Me.txtResult.FormatConditions.Add(acFieldvalue, _
                acLessThan, Me.txtTarget.value)
   Set objFrc = Me.txtResult.FormatConditions.Add(acFieldvalue, _
                acEqual, Me.txtTarget.value)
   Set objFrc = Me.txtResult.FormatConditions.Add(acFieldvalue, _
                acGreaterThan, Me.txtTarget.value)

   ' 根据用户的选项选择,格式化 txtResult 文本框
   Select Case optgrpChoice.value

      Case 1
         ' 按它的索引值引用每个格式条件

         With Me.txtResult.FormatConditions(0)
            .FontBold = False
            .FontItalic = True
            .FontUnderline = True
         End With

         With Me.txtResult.FormatConditions(1)
            .FontBold = True
            .FontItalic = False
            .FontUnderline = True
         End With

         With Me.txtResult.FormatConditions(2)
            .FontBold = True
            .FontItalic = True
            .FontUnderline = False
         End With

      Case 2

         With Me.txtResult.FormatConditions(0)
            .BackColor = lngRed
            .FontBold = True
            .ForeColor = lngBlack
         End With

         With Me.txtResult.FormatConditions(1)
            .BackColor = lngBlack
            .FontBold = True
            .ForeColor = lngRed
         End With

         With Me.txtResult.FormatConditions(2)
            .BackColor = lngYellow
            .FontBold = True
            .ForeColor = lngRed
         End With

      Case 3

         Me.txtResult.FormatConditions(0).Enabled = False
         Me.txtResult.FormatConditions(1).Enabled = True
         Me.txtResult.FormatConditions(2).Enabled = False

      Case 4

         ' 这里,重新基于一比较今天日期字符串值的表达式定义格式
         Me.txtResult.FormatConditions.Delete

         Set objFrc = Me.txtResult.FormatConditions. _
                      Add(acExpression, , (Format(Now(), "ddd") = "Sat"))
         Set objFrc = Me.txtResult.FormatConditions. _
                      Add(acExpression, , (Format(Now(), "ddd") <> "Sat") And _
                      (Format(Now(), "ddd") <> "Sun"))
         Set objFrc = Me.txtResult.FormatConditions. _
                      Add(acExpression, , (Format(Now(), "ddd") = "Sun"))

         With Me.txtResult.FormatConditions(0)
            .BackColor = lngYellow
            .FontBold = True
            .ForeColor = lngBlack
         End With

         With Me.txtResult.FormatConditions(1)
            .BackColor = lngBlack
            .FontBold = True
            .ForeColor = lngRed
         End With

         With Me.txtResult.FormatConditions(2)
            .BackColor = lngRed
            .FontBold = True
            .ForeColor = lngBlack
         End With

   End Select

End Sub

讲述代码的细节
    首先,我们定义一个 FormatCondition 对象变量 objFrc。对象将包含我们所需的格式条件。下一步,我们设置要用在 Results 文本框进行格式化的颜色。

' 设置背景色和前景色
lngRed = RGB(255, 0, 0)
lngWhite = RGB(255, 255, 255)
lngBlack = RGB(0, 0, 0)
lngYellow = RGB(255, 255, 0)

    然后使用 FormatConditions 集合的 Delete 方法移除任何已存在的 FormatCondition 对象。

Me.txtResult.FormatConditions.Delete

    确保将要创建三个 FormatCondition 对象的空间,这是必须的。通过引用其索引值删除 FormatCondition 对象如下: 

Me.txtResult.FormatConditions(1).Delete

    接下来,定义指定的格式条件并使用 Add 方法将它们加入到 FormatConditions 集合。

Set objFrc = Me.txtResult.FormatConditions.Add(acFieldvalue, _
             acLessThan, Me.txtTarget.value)
Set objFrc = Me.txtResult.FormatConditions.Add(acFieldvalue, _
             acEqual, Me.txtTarget.value)
Set objFrc = Me.txtResult.FormatConditions.Add(acFieldvalue, _
             acGreaterThan, Me.txtTarget.value)

    表达式及控件确定何时应用格式以及应用哪个控件上。例如:如果 txtResult 控件字段值少于 txtTarget 控件字段值等等条件,在 txtResult 控件上应用格式。 

    然后,使用 Select Case 语句序号来确定那个条件应用那个格式。这是通过 Choose an option 区域(optgrpChoice 控件)的选项值来决定的。例如用户选择了选项 1 (option 1) 并且 Result 文本框的值大于 Target 文本框的值,则以下代码将会执行:

With Me.txtResult.FormatConditions(2)
   .FontBold = True
   .FontItalic = True
   .FontUnderline = False
End With

    这里,第三个格式条件(索引值从 0 开始)将加粗和斜格式应用到 Result 文本框。使用 Select Case 语句举例说明不同的格式组合。 

    当用户选择选项 4 (Option 4) 这个特殊情形时,将移除集合中已存在的 FormatCondition 对象并动态创建新的 FormatCondition 对象。

Me.txtResult.FormatConditions.Delete
Set objFrc = Me.txtResult.FormatConditions.Add(acExpression, _
             , (Format(Now(), "ddd") = "Sat"))
Set objFrc = Me.txtResult.FormatConditions.Add(acExpression, _
             , (Format(Now(), "ddd") <> "Sat") And _
             (Format(Now(), "ddd") <> "Sun"))
Set objFrc = Me.txtResult.FormatConditions.Add(acExpression, _
             , (Format(Now(), "ddd") = "Sun"))

    在这些条件定义中,使用了表达式事产生用三个字母表示的今天日期的星期值,并与字符串 Sat 和 Sun 进行比较来确定今天是平日还周末。使用 access 的 Format 函数可将今天的日期转化为三个字母的字符串。是通过比较字符串不等于 Sat 或 Sun 来确定今天是否是平日。

结论
    在本文中,我们探讨了 Access 中的控件条件格式。我们通过用户接口、定义和创建可编程条件格式来察看应用条件格式的规则。尽管任何时候 access 限制每个控件不超过三个条件格式,但是可以通过使用 Select Case 语句和动态改变格式条件来提供附加的功能。对该技术进行举一返三,将产生更富有弹性的条件格式.


(责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价: