Accessお手本データベースのホームへ戻る

フォームに条件付き書式設定を実行時ダイナミックに設定するお手本

 

3-2-1 条件付き書式設定を実行時ダイナミックに設定するサンプルデータベース

 

このサンプルデータベースでは、受注明細の受注日、数量、金額に条件付き書式を設定して、条件に該当するデータを赤の下線付きで表示します。条件式には、BETWEEN, NOT BETWEEN, =, NOT =, >, <, >=,<=など8種類の比較演算子を選択することができます。

 

サンプルデータベース(CH3-2.mdb)では、以下に示すノウハウを習得することができます。

 

◆ データシートの任意のフィールドに条件付書式を設定する方法

◆ 複数のコントロールを一括して可視/非可視状態に変更する方法

◆ コントロールを左右に移動する方法

 

データベース CH3-2.mdbは、Accessに添付されているサンプルデータベース Northwind.mdb を基に作成します。

 

● 受注明細フォームを作成するには

 

1 Accessを起動して作業フォルダに新規データベース CH3-2.mdb を作成します。

 

2 ファイルメニューから外部データの取り込みインポートをクリックします。インポートのダイアログが表示されたら、Accessのサンプルデータベース Northwind.mdb を選択してインポートボタンをクリックします。

 

オブジェクトのインポートダイアログが表示されたら、テーブルタブをクリックして、受注受注明細商品得意先テーブルをクリックします。最後にOKボタンをクリックしてインポートを完了させます。

 

3-2-2 Northwind.mdbから受注、受注明細、商品、得意先テーブルを取り込む

 

3 データベースウィンドウからクエリをクリックしたら、新規作成ボタンをクリックします。テーブルから、受注コード、商品名、受注日、数量をダブルクリックしてQEBのフィールドに移動します。金額のフィールドには、計算式 CCur([受注明細.単価]*[数量])を埋め込みます。受注明細のクエリを作成したら、qry受注明細の名称で保存してクエリを閉じます。

 

3-2-3 受注明細のクエリを作成

 

4 データベースウィンドウからフォームをクリックしたら、新規作成ボタンをクリックします。フォームの新規作成ダイアログが表示されたら、オートフォーム:表形式をクリックします。コンボボックスからクエリqry受注明細を選択したらOKボタンをクリックして受注明細のフォームを作成します。

 

3-2-4 受注明細のデータシート形式のフォーム作成

 

5 フォームが表示されたら、frm受注明細の名称で保存して、Accessを終了させます。

 

 

  受注明細フォームに、受注日、数量、金額の条件付書式を実行時ダイナミックに設定するには

 

1 Accessを起動して CH3-2.mdb を開きます。

 

2 フォームfrm受注明細をデザインモードで開いたら、フォームヘッダーの受注日、数量、金額のラベルをトグルボタンと置換します。ツールボックスのコントロールウィザードがクリック(有効)されているか確認したら、オプショングループウィザードで受注日数量金額のトグルボタンを作成します。トグルボタンの値は、1-受注日、2-数量、3-金額のように設定します。オプショングループのデフォルト値は設定しません。

 

3-2-5 オプショングループウィザードで、受注日、数量、金額のトグルボタンを作成

 

3 オプショングループのフレームのプロパティを表示させたら、コントロール名をgrpConditionに書き換えます。また、フレームが表示されないように境界線スタイルを透明に設定します。

 

3-2-1 オプショングループのプロパティの設定

コントロールの種類

プロパティ

オプショングループ

名前

grpCondition

境界線スタイル

透明

トグルボタン1

オプション値(受注日)

トグルボタン2

オプション値(数量)

トグルボタン3

オプション値(金額)

 

3-2-6 オプショングループに受注日、数量、金額を配置した例

 

4 フォームヘッダーの最上位にタブコントロールを作成したら、コントロール名をtabConditionに書き換えます。タブコントロールには、通常2個のページが作成されますので1個削除して1ページにします。タブコントロールのスタイルを“なし”に設定して四角形のようなコントロールにします。このタブコントロールのページに、ラベル1lblField)、コンボボックス(cboConditions)テキストボックス1(txtValue1)ラベル2(lblAnd)テキストボックス2txtValue2)、トグルボタンtglFormat)を配置します。

 

3-2-2 タブコントロールに配置するコントロールのプロパティ

コントロールの種類

プロパティ

タブコントロール

(1ページのタブとする)

名前

tabCondition

スタイル

なし

ラベル1

名前

lblFIeld

コンボボックス

名前

cboCondition

値集合タイプ

値リスト

値集合ソース

0;BETWEEN;1;NOT BETWEEN;2;=;3;NOT =;4;>;5;<;6;>=;7;<=

テキストボックス1

名前

txtValue1

可視

いいえ

テキストボックス2

名前

txtValue2

可視

いいえ

ラベル2

名前

lblAnd

トグルボタン

名前

tglFormat

 

 

3-2-7 タブコントロールのページに条件付書式を入力するコントロールを配置

 

ラベル1(lblField)の標題は、実行時書き換えますので取りあえず受注日を入力しておきます。コンボボックス(cboConditions)には、コンボボックスウィザードを使用して列1に0-7の数値、列2に比較演算子の文字列を入力します。尚、列1の数値は幅を0cmにして非表示にします。テキストボックス1(txtValue1)、テキストボックス2(txtValue2)可視プロパティは、実行時書き換えますので“いいえ”に設定しておきます。

 

3-2-8 コンボボックス(cboConditions)には比較演算子を格納、列1は幅を0cmにして非表示に設定

 

5 詳細セクションの受注日、数量、金額のテキストボックスのコントロール名をtxtOrderDate, txtQuantity, txtAmount に書き換えます。

 

6 フォームのモジュールを表示させたら、CH3-2.mdbのフォームfrm条件付書式を実行時ダイナミックに設定のモジュールをコピーして貼り付けます。これで、フォームに配置されたコントロールにイベントが登録されます。フォームモジュールの内容については、リスト3-2-1 frm条件付書式を実行時ダイナミックに設定を参照してください。

 

7 フォームを開いたら、受注日のトグルボタンをクリックして比較演算子のコンボボックスから”=”をクリックします。テキストボックスにマウスを移動して、1996/01/10を入力したら、書式設定のトグルボタンをクリックします。受注日が1996/01/10に該当するデータが赤の下線で表示されるか確認します。

 

8 条件付書式の設定が正常に動作することを確認したらフォームを保存して、Access を終了させます。

 

3-2-9 受注日の条件付書式に1996/01/10 を設定した例

 

Tip

複数のコントロールを一括して可視/非可視状態にするには

 

フォーム”frm受注明細では、受注日、数量、金額のトグルボタンをクリックすると、条件付き書式を入力する複数のコントロールが同時に表示されます。コントロールを表示するには、可視プロパティを“はい”に設定します。複数のコントロールを表示するには、個々のコントロールの 可視プロパティを“はい”に設定する必要があります。

フォーム”frm受注明細では、個々のコントロールの可視プロパティを設定する替わりに、これらのコントロールをタブコントロールのページに配置して一括切り替えを解決しています。タブコントロールの可視プロパティを“はい”、“いいえ”に切り替えることにより、タブに配置された複数のコントロール可視/非可視状態にすることができます。

 

 

リスト3-2-1  “frm条件付書式を実行時ダイナミックに設定のモジュール

Private Enum ConditionType

  ctOrderDate = 1

  ctQuantity = 2

  ctAmount = 3

End Enum

 

Private Sub cboConditions_AfterUpdate()

  Dim fShowV2 As Boolean

  Dim txtValue As TextBox

   

  '

  ' 条件付き書式の比較演算子を調べて値1、値2が必要か

  ' どうか決めます

  '

  Select Case Me.cboConditions

    Case acBetween

      fShowV2 = True

    Case acNotBetween

      fShowV2 = True

    Case Else

      fShowV2 = False

  End Select

 

  '

  ' 書式設定のトグルボタンを自動調整します

  '

  With Me

    .txtValue1.Visible = True

    .txtValue2.Visible = fShowV2

    If fShowV2 Then

      Set txtValue = .txtValue2

    Else

      Set txtValue = .txtValue1

    End If

    .tglFormat.Left = txtValue.Left + txtValue.Width + 100

    .tglFormat.Visible = True

  End With

End Sub

 

Private Sub cboConditions_GotFocus()

  Me.cboConditions.Dropdown

End Sub

 

Private Sub Form_Open(Cancel As Integer)

  Call SetAppTitle_FS("CH1-2 Conditional Formatting2 (C) " _

& Year(Date) & " by Akio Kasai")

End Sub

 

Private Sub tglFormat_Click()

 

  Dim txt As TextBox

  Dim strValue1 As String

  Dim strValue2 As String

       

  '

  ' 受注日、数量、金額の条件付書式を設定します

  '

  Select Case Me.grpCondition

    Case ctOrderDate

      Set txt = Me.txtOrderDate

      Me.txtQuantity.FormatConditions.Delete

      Me.txtAmount.FormatConditions.Delete

      strValue1 = "#" & Format(Me.txtValue1, "yyyy/mm/dd") & "#"

      strValue2 = "#" & Format(Me.txtValue2, "yyyy/mm/dd") & "#"

    Case ctQuantity

      Set txt = Me.txtQuantity

      Me.txtOrderDate.FormatConditions.Delete

      Me.txtAmount.FormatConditions.Delete

      strValue1 = Nz(Me.txtValue1)

      strValue2 = Nz(Me.txtValue2)

    Case ctAmount

      Set txt = Me.txtAmount

      Me.txtOrderDate.FormatConditions.Delete

      Me.txtQuantity.FormatConditions.Delete

      strValue1 = Nz(Me.txtValue1)

      strValue2 = Nz(Me.txtValue2)

  End Select

 

  '

  ' 条件1のとき前景色を赤で下線を引くように設定します

  '

  With txt.FormatConditions

    .Delete

    If Me.tglFormat Then

      With .Add(acFieldValue, cboConditions, strValue1, strValue2)

        .ForeColor = vbRed

        .FontUnderline = True

        .Enabled = True

      End With

    End If

  End With

End Sub

 

Private Sub ResetFormat()

  Me.cboConditions = Null

  With Me.tglFormat

    .Visible = False

    .Enabled = False

    .Value = False

  End With

  With Me.txtValue1

    .Visible = False

    .Value = Null

  End With

  With Me.txtValue2

    .Visible = False

    .Value = Null

  End With

  With Me

    .txtOrderDate.FormatConditions.Delete

    .txtQuantity.FormatConditions.Delete

    .txtAmount.FormatConditions.Delete

  End With

End Sub

 

Private Sub Form_Load()

  Me.tabCondition.Visible = False

  Me.grpCondition = Null

  Call ResetFormat

End Sub

 

Private Sub grpCondition_AfterUpdate()

'

' 受注日、数量、金額のトグルボタンをクリックしたとき

' 条件付書式を入力する各種コントロールを可視状態にします

'

  Me.tabCondition.Visible = True

  With Me.lblField

    Select Case Me.grpCondition

      Case ctOrderDate

        .Caption = "受注日"

      Case ctQuantity

        .Caption = "数量"

      Case ctAmount

        .Caption = "金額"

    End Select

  End With

  Call ResetFormat

  Me.tglFormat.Enabled = True

  Me.cboConditions.SetFocus

End Sub

 

 

 

  grpCondition_AfterUpdate()イベントの処理について

このイベントは、オプショングループのトグルボタン(受注日、数量、金額)をクリックしたときに実行されます。このイベントでは、Me.tabCondition.Visible =Trueで、タブコントロールの可視プロパティを“はい”に設定しています。タブコントロールのプロパティを可視状態にすると、タブコントロールに配置された複数のコントロールが表示されます。Select Case…End Selectで、ラベル(lblField)の標題にクリックしたトグルボタンのフィールド名を設定します。最後に、Me.cboConditions.SetFocusで比較演算子を選択するコンボボックスにフォーカスを移動して終了します。

 

  cboConditions_AfterUpdate()イベントの処理について
このイベントは、比較演算子のコンボボックスから演算子(BETWEEN, NOT BETWEEN, =,….)をクリックしたときに実行されます。Select Case….End Selectで、比較演算子を調べて、acBetween, acNotBetweenならfShowV2フラグをTrueに設定します。その他の演算子なら,fShowV2フラグをFalseに設定します。Me.txtValue1.Visible=TrueMe.txtValue2.Visible=fShowV2で条件式の値1、値2を入力するテキストボックスの可視プロパティを“はい”に設定しています。値2のテキストボックスは、fShowV2のフラグにより自動的に可視/非可視状態に設定されます。Me.tglFormat.Left = txtValue.Left + txtValue.Width + 100で、書式設定のトグルボタンが表示される位置を調整します。(.Width+100を加算していますが、この単位は100 twipです。1論理cm567twipに相当します。)txtValueには、比較演算子が値1のみ必要なときはMe.txtValue1、値1と値2が必要なときはtxtValue2が設定されます。 最後に、Me.tgiFormat.Visible=Trueで可視プロイパティを“はい”に設定して終了します。

 

 

  tglFormat_Click()イベントの処理について
このイベントは、書式設定のトグルボタンをクリックしたときに実行されます。Select Case…End Selectでは、前回設定した条件付書式を削除して、新たに設定する条件式の値1、値2をメモリ変数(strValue1,strValue2)に格納します。With txt.FormatConditions….End Withでは、条件付書式を設定しています。.ForeColor = vbRed, .FontUnderline = Trueで、前景色を赤の下線付きで表示するように設定しています。


 

Tip

カラーの組み込み定数を参照するには

 

Visual Basic Editor(VBE)を起動したら、表示メニューからオブジェクトブラウザをクリックします。オブジェクトブラウザが表示されたら、検索文字列のコンボボックスにColorConstantsを入力して検索ボタンをクリックします。メンバリストに、カラーの組み込み定数一覧が表示されます。

 

 

 

ダウンロード (CH3-2.lzh)
Accessお手本データベースのホームへ戻る