會員登錄 - 用戶注冊 - 網(wǎng)站地圖 Office中國(office-cn.net),專業(yè)Office論壇
當前位置:主頁 > 技巧 > Access技巧 > 窗體控件 > 正文

在ACCESS中擴展條件格式的功能

時間:2004-11-23 22:55 來源:AccessFaq 作者:Franknbs… 閱讀:

作    者:朱亦文(譯)  
摘    要:在 Microsoft access 中使用用戶接口及通過編程創(chuàng)建條件格式。探討在不同環(huán)境下擴展條件格式的編程方法。

正    文:

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

2002年3月 

應(yīng)用于: Microsoft® access 2000 及以后版本 

摘  要: 在 Microsoft access 中使用用戶接口及通過編程創(chuàng)建條件格式。探討在不同環(huán)境下擴展條件格式的編程方法。 

簡介
    自 Microsoft® access 2000 開始,能夠在 combo box 和 text box 控件上應(yīng)用條件格式。這將允許按指定的條件改變包括在這些控件中的數(shù)據(jù)的原始顯示特性,如背景色和加粗。 

    有兩個方法創(chuàng)建和應(yīng)用條件格式。其一,可以先選擇控件,然后在[ 格式 ]菜單上點擊[ 條件格式 ]。其二,使用 Microsoft Visual Basic® for Applications (VBA),也能創(chuàng)建使用條件格式的[ FormatCondition ]對象實例并把它們加入到[ FormatCondition ]對象集合中。 

    每個做了條件格式的控件最少有兩個格式--一個默認格式和一個當指定條件為 True 時的指定格式。一個控件可以有多至三個的指定格式條件。這三個條件的限制可由 VBA 代碼編程在不同的環(huán)境下確定條件的值來克服。本文第一個示例將通過用戶界面來創(chuàng)建條件格式。我們將會看到在運行時使用 VBA 代碼來創(chuàng)建條件格式改變格式條件這種更好的方法。

通過用戶界面創(chuàng)建條件格式
    在<格式>菜單上的<條件格式>菜單提供一個簡單的方法創(chuàng)建和應(yīng)用多至三個條件格式。當點擊<格式>菜單上的<條件格式>,將出現(xiàn)<條件格式>對話框,如圖:

按此在新窗口瀏覽圖片

圖 1. <條件格式>對話框

    <默認格式 Default Formatting>區(qū)域顯示控件在沒有使用任何指定條件的情況下的格式。<條件 1 Condition 1>區(qū)域允許添加指定的條件格式。當要添加條件格式時,點擊[ 添加 Add ]按鈕,對話框?qū)⒆疃鄶U展至三個條件格式。 

    <條件格式>對話框提供六個格式控件來幫助指定每一個條件格式。從控件行的最左側(cè)開始,有加粗、斜體、下劃線、背景色以及前景色,最后一個是控件控件的啟用狀態(tài)(允許和禁止)。在最左邊的下拉列表框允許選擇<字段值為>、<表達式為>或者<字段有焦點>。也能通常操作符如:相等(=)、大于(>)、位于區(qū)間(Between)及更多。如果在一個計算字段上應(yīng)用條件格式,必須使用標準的 VBA 操作符書寫表達式。 

    如果格式化條件要求一個表達式,可以使用表達式生成器來幫你建立表達式。 

    圖 2 舉例說明在一個窗體中使用條件格式格式化與之相關(guān)的 Special Customer 文本框。

按此在新窗口瀏覽圖片

圖 2. 顯示通過用戶接界面創(chuàng)建的格式化了的窗體

    基于 Total 文本框的值作為格式化條件改變背景色。在該情形中,如果 Total 文本框的計算值介于 300 到 399 之間,文本框顯示為綠色。圖3 舉例說明在<條件格式>對話框中定義條件。

按此在新窗口瀏覽圖片

圖 3. 基于 Total 文本框值定置的格式化對話框 

條件格式編程
    當能夠非常熟練的使用<條件格式>對話框創(chuàng)建條件格式后,在這個時期,可能想使用 VBA 代碼了。通過使用代碼創(chuàng)建條件格式,能管理條件格式,用戶就會發(fā)現(xiàn)可以超過允許的三個條件格式。也可能想在多個應(yīng)用程序或多個窗體中使用條件格式。在代碼中產(chǎn)生條件,非常易于在不同的窗體中使用復(fù)制粘貼代碼應(yīng)用同樣的格式。

    窗體上的每個組合框和文本框有一個包含對象的對象集合。該對象集合有(添加)和(刪除)方法。對象有(修改)方法。對象沒有名稱屬性,因此通常通過其索引值進行引用。另外,對象擁有諸如(類型)屬性的屬性設(shè)置,允許應(yīng)用基于字段值或表達式的條件。有關(guān)于對象集合和對象的更詳細的信息,請參看 Micosoft 開發(fā)者網(wǎng)絡(luò)的幫助。 

    來看看另一個定置窗體及在其背后的代碼,是如何通過編程來創(chuàng)建條件格式及如何提供附加格式選擇。圖 4 顯示一個文本框中根據(jù)靶號確定格式的窗體。

按此在新窗口瀏覽圖片

圖 4. 基于用戶選項應(yīng)用條件格式的窗體

    在這個窗體中,用戶在 Target 文本框中鍵入數(shù)字,并在 Choose an option 區(qū)域選擇一選項(Option)。用戶然后在 Result 文本框中鍵入數(shù)字并點擊[Change]按鈕。對于前面三選項,Result 文本框的值與 Target 文本框的值進行比較,并根據(jù)兩個值是否是少于、等于、或大于另一個,格式化 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

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

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

   ' 創(chuàng)建三個格式對象并將它們添加到 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)

   ' 根據(jù)用戶的選項選擇,格式化 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

講述代碼的細節(jié)
    首先,我們定義一個 FormatCondition 對象變量 objFrc。對象將包含我們所需的格式條件。下一步,我們設(shè)置要用在 Results 文本框進行格式化的顏色。

' 設(shè)置背景色和前景色
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

    確保將要創(chuàng)建三個 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)

    表達式及控件確定何時應(yīng)用格式以及應(yīng)用哪個控件上。例如:如果 txtResult 控件字段值少于 txtTarget 控件字段值等等條件,在 txtResult 控件上應(yīng)用格式。 

    然后,使用 Select Case 語句序號來確定那個條件應(yīng)用那個格式。這是通過 Choose an option 區(qū)域(optgrpChoice 控件)的選項值來決定的。例如用戶選擇了選項 1 (option 1) 并且 Result 文本框的值大于 Target 文本框的值,則以下代碼將會執(zhí)行:

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

    這里,第三個格式條件(索引值從 0 開始)將加粗和斜格式應(yīng)用到 Result 文本框。使用 Select Case 語句舉例說明不同的格式組合。 

    當用戶選擇選項 4 (Option 4) 這個特殊情形時,將移除集合中已存在的 FormatCondition 對象并動態(tài)創(chuàng)建新的 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"))

    在這些條件定義中,使用了表達式事產(chǎn)生用三個字母表示的今天日期的星期值,并與字符串 Sat 和 Sun 進行比較來確定今天是平日還周末。使用 access 的 Format 函數(shù)可將今天的日期轉(zhuǎn)化為三個字母的字符串。是通過比較字符串不等于 Sat 或 Sun 來確定今天是否是平日。

結(jié)論
    在本文中,我們探討了 Access 中的控件條件格式。我們通過用戶接口、定義和創(chuàng)建可編程條件格式來察看應(yīng)用條件格式的規(guī)則。盡管任何時候 access 限制每個控件不超過三個條件格式,但是可以通過使用 Select Case 語句和動態(tài)改變格式條件來提供附加的功能。對該技術(shù)進行舉一返三,將產(chǎn)生更富有彈性的條件格式.


(責任編輯:admin)

頂一下
(0)
0%
踩一下
(0)
0%
發(fā)表評論
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴禁發(fā)布色情、暴力、反動的言論。
評價: