他フォームのチェックボックスを参照した条件付書式

このQ&Aのポイント
  • 他のフォームに設置したチェックボックスの状態を条件として使い、フォーム内のテキストボックスに色を付ける方法について教えてください。
  • [フォームA]のチェックボックスがONの場合、[フォームB]の非連結テキストボックスに色を点けたいです。[フォームA]には任意フィールドにコメントが入力されることもあります。
  • [フォームA]に設置したチェックボックスの状態を[フォームB]のテキストボックスに反映するための条件付書式の式がうまくいきません。解決策を教えてください。
回答を見る
  • ベストアンサー

他フォームのチェックボックスを参照した条件付書式

OS WinXP ACCESS 2000 ■[フォームA]にチェックボックスを設置して 条件付書式にてチェックボックスのONで任意フィールドに色を点けています。 ※チェックボックスは連結チェックボックスです。  条件付書式の式 [チェックボックス名]=True この方法で問題なく[フォームA]の任意のフィールドに色を点けることはできました。 ■ここからが質問です。 この[フォームA]に設置してあるチェックボックスがONの時 [フォームB]に設置してある非連結テキストボックスにも色を点けたいです。 ※[フォームA]に設置したチェックボックスは、どのレコードがONの状態でも [フォームB]のテキストボックスに色を点けたいです。 目的は [フォームA]の任意フィールドに重要なコメントが入力されている場合 [フォームB]を開いている時に一目で分かる様にしたいので…。 一応、[フォームB]の非連結テキストボックスに 条件付書式の式に  [Forms]![フォームA名]![チェックボックス名]=True としましたがうまくいきませんでした…。 ※フォームは[フォームA][フォームB]ともに単票形式です。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

No.1です。 まず、前回の補足から(汗) 背景色(BackColor)プロパティを使用する場合は、フォームAのチェックボックスの 更新後だけでなく、フォームAの「開くとき」イベント(または「読み込み時」イベント) でも、同様のコードが必要でしたので、こちらを使う場合はご注意下さい。 (前回の回答のみだと、開いただけでは背景色が正しく表示されず、チェックボックス を更新して初めて反映されることになります) ※コード内で「DCount("*", "tbl", "CheckBox=True") > 0」としていましたが、   これは「DCount("*", "テーブル名", "[フィールド名]=True") > 0」の誤記です。   失礼致しました(テスト時のコードのCopy&Paste後、修正し忘れました)。 > [フォームA]である任意の顧客(顧客ID)が表示された状態で、 > 設置されている任意のチェックボックスがONの場合、 > 同じ顧客(顧客ID)が表示されている[フォームB]を開いたときに、 > [フォームA]で入力されたどのレコード(日付)に関係なく任意の > テキストボックスに色を点けたいです。 この場合は、「チェックボックスがTrue」という条件に加えて、「顧客IDがフォームAのそれと 一致」という条件を満たすものをカウントすればよい、ということになるので、DCount関数 の第3引数に、その条件([顧客ID]=[Forms]![フォームB]![txt顧客ID])を追加します。 (今回の件では「双方の条件を同時に満たすもの」の確認となるので、「And」で接続) <現在>  DCount("*","テーブル名","[フィールド名]=True") > 0 <修正>  DCount("*","テーブル名","[フィールド名]=True And [顧客ID]=[Forms]![フォームB]![txt顧客ID]") > 0 ※テーブル上のフィールド名が「顧客ID」、フォームB上で顧客IDを表示しているテキスト   ボックスの名前が「txt顧客ID」の場合です。   (どちらも同じ「顧客ID」という名前なら、「txt顧客ID」は「顧客ID」でOK)

torento19
質問者

お礼

DexMachina こんばんは! お礼のご連絡が遅くなりました。 先ほどアドバイスをいただいた方法で出来ました! 感激です!! まだまだ勉強不足ですので、将来はDexMachinaさんのように アドバイスできるよう日々精進していきます。 この度は本当にありがとうございました。 また、お礼が遅くなりましたことは改めてお詫びいたします。 m(_ _)m

その他の回答 (1)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

条件付き書式のいいところは  ・帳票フォームのレコード間で、データに基づいた変更が可能   (プロパティシートからの設定では、レコードによらず一律にしかできない)  ・マクロやVisual Basic for Applications(VBA)を使用しなくても対応可能 といったところかと思いますが、今回ご質問の件では、残念ながらマクロやVBAが 必須になります。 なお、本件ではレコードごとの書式変更でもないので、条件付き書式以外に 背景色(BackColor)プロパティなどの切替でも対応可能です。 以下、双方について説明しますので、やりやすいと思われる方をお選び下さい。 【共通の説明】 「どのレコードがONの状態でも」という場合は、テーブル全体を確認する必要が あります(→「Forms!~=True」では確認できない)。 確認方法には幾つかありますが、「定義域集計関数」の1つのDCount関数を 使用するのが最も簡単かと思います。  DCount("*","テーブル名","[フィールド名]=True") > 0 ※「テーブル名」にはフォームAのレコードソースにしているテーブル/クエリの名前   を、「フィールド名」=フォームAのチェックボックスのコントロールソースにしている   フィールドの名前を、それぞれ指定します。  (角括弧とダブルクォートは上記のまま残し、「テーブル名」「フィールド名」だけを   実際の名前に置き換えます) また、関数でテーブルのデータを確認する場合、確認対象は「保存済みレコード」 になります。 編集中のレコードについては、編集前のデータが参照されますので、フォーム上の コントロール(チェックボックスなど)の更新時にテーブル データの確認を行う場合は、 先にレコードを保存しないと、そのレコードについての編集が反映されないことに なるので注意が必要です。 【条件付き書式を使用する場合】 条件付き書式の式に上記の式を設定した上で、フォームAのチェックボックスの 更新後イベントに、フォームBのテキストボックスに更新を反映するコードを記述 します。 1)フォームAをデザインビューで開く 2)チェックボックスをダブルクリックするなどして、当該チェックボックスのプロパティ  シートを開く 3)プロパティシートの『イベント』タブの『更新後処理』を選択し、右端に表示  される「...」(ビルド)ボタンをクリック 4)初期設定では『ビルダの選択』ダイアログが開くはずなので、そこで「コード  ビルダ」を選択し、Okボタンをクリック 5)VBAの編集画面(VBE)が開くので、以下のようなコードを記述:  (チェックボックス名を「チェック1」、テキストボックス名を「テキスト0」とした場合) Private Sub チェック1_AfterUpdate() 'エラー発生時は「エラー処理」に飛ばします。 On Error GoTo エラー処理   'レコードを保存します。   DoCmd.RunCommand acCmdSaveRecord   'フォームBのテキストボックスに条件付き書式の設定を反映させます。   Forms!フォームB!テキスト0.Requery 終了処理:   'このSubを終了します。   Exit Sub エラー処理:   Select Case Err     Case 2450       'フォームBが開いていなかった場合       '→特に何もしません(MsgBoxを出しても可)     Case Else       MsgBox Err & ":" & Error$, , Me.Name & " チェック1"   End Select   '「終了処理」に飛ばします。   Resume 終了処理 End Sub 6)フォームを保存して閉じる 【BackColorプロパティで切り替える場合】 条件付き書式が設定されていると正しく動作しなくなりますので、テキスト ボックスの条件付き書式は削除した上で、以下の操作を行います。 1)上記の「1~4」を実行します。 2)VBAの編集画面で、以下のようなコードを記述:  ※上と共通となるコードについてはコメントを省略しています。 Private Sub CheckBox_AfterUpdate() On Error GoTo エラー処理   '変数の宣言(→色指定の際に使用します)   Dim BkClr As Long   DoCmd.RunCommand acCmdSaveRecord   'チェックボックスがTrueのレコードの有無を確認し、色を決定します。   '(「RGB」は色指定の関数です。これについてはヘルプを確認下さい(汗))   If DCount("*", "tbl", "CheckBox=True") > 0 Then     BkClr = RGB(255, 0, 0)       '該当あり→赤   Else     BkClr = RGB(255, 255, 255)    '該当なし→白   End If   'テキストボックスの背景色を設定します。   Forms!フォームB!テキスト0.BackColor = BkClr 終了処理:   Exit Sub エラー処理:   Select Case Err     Case 2450     Case Else       MsgBox Err & ":" & Error$   End Select   Resume 終了処理 End Sub 3)フォームを保存して閉じる ・・・長くなりましたが(汗)、以上です。

torento19
質問者

補足

DexMachinaさん こんばんは。 早速のアドバイスありがとうございます。 また、大変丁寧なアドバイスで感無量です。 アドバイス内容どおり設定をしたら どちらの方法でもきちんとフィールドに色が点きました。 ありがとうございます。 ※今回は【条件付き書式を使用する場合】を採用しました。 ■もう1点だけお力をお借りできればと幸いです。 初めの質問で  ※[フォームA]に設置したチェックボックスは、   どのレコードがONの状態でも と記載しておりましたが、 この考え方ですと、[フィールドB]で表示されている 全ての主キー(顧客ID)に対して適用されてしまいました。 ★これは私が初めに質問した時の書き方が完全に間違っておりました。 申し訳ございません。 ■改めてご質問を致しますと [フォームA]である任意の顧客(顧客ID)が表示された状態で、 設置されている任意のチェックボックスがONの場合、 同じ顧客(顧客ID)が表示されている[フォームB]を開いたときに、 [フォームA]で入力されたどのレコード(日付)に関係なく任意のテキストボックスに色を点けたいです。 つまり、 伊藤さんの販売履歴フォーム[フォームA]で、任意フィールドに重要なコメントが入力されたので、チェックボックスをONにしてフィールドに色を点けます。 別の[フォームB]で、同じ伊藤さんの情報を開いている時に販売履歴フォーム[フォームA]で入力した日付に関わらず、チェックボックスがONになっていれば、必ず[フォームB]に設置してあるテキストボックスに色が点いてほしい。 となります。 条件付書式の式に入力している  DCount("*","テーブル名","[フィールド名]=True") > 0 の*印がワイルドカードかと思ったので、[顧客ID]を入力してみましたが、 やはり全ての顧客に対して色が点いてしまいました。 よろしくお願いいたします。

関連するQ&A

  • チェックボックスと条件付書式について

    書籍を見ながらスケジュール表を作成しています。 A列に月日、B列にチェックボックス、C列にスケジュール記入欄、D列にコメント欄を設けました。 チェックボックスのコントロールの書式設定はE列にしました。 C2のセルに次の3つの条件付書式を設定しました。 1.チェックボックスにレ点が入ると文字の色が灰色になる。 2.月日が当日になると、シートの色が黄色くなり文字の色が赤くなる。 3.月日が当日より後の場合は、文字の色は青くなる。 ここから質問です。 1.条件付書式を下のセルにコピーすると、チェックボックスのコントロールの書式設定が、全て1番最初にコントロールの書式設定したセル番号になる。 2.当日以降のチェックボックスにレ点(TRUE)を入れると、セルに黄色の背景色がつく。 質問の1・2がどうしてなるのか、また、これを是正する方策をご指導願います。

  • ACCESSで条件によってフォーム上のフィールドの色を変更

    一覧形式のフォームがあり、条件によって色を変更したいのですが、その条件というのが下記のような感じです。 フィールドA | フィールドB | フィールドC | チェックボックス チェックボックスのチェックがあったら、フィールドA・B・Cの色をグレーにする。 チェックがなかったら白いまま。 というものです。 条件付書式だと、色を変更するフィールドそのもののデータを参照にしないといけないんですよね? フォームオープンのところにVBAをかいてみたんですが、ひとつひとつは認識してないみたいで…。 どのようにすればいいのでしょうか? よろしくお願いします。

  • 条件付書式・・・?

    いつもお世話になってます。 アクセスのフォームで日付のテキストボックスがあるんですが、 その背景を日にあわせて自動的に変えたいと思います。 ・一ヶ月前の間 → 黄色 ・今月中    → 赤 条件付書式でできそうな気がするんですが、具体的な設定の仕方が わかりません。教えて下さい。 宜しくおねがいします。 アクセスは2000を使っています。

  • 条件付書式と相対参照

    条件付書式についての質問です。 たとえば、A1:D5の範囲を選択し、書式→条件付書式→数式 A1=1 と入力します。 つまりA1に1と入力されたら、選択した範囲のセルに色がつくようにという指示です。 ところが、このA1を絶対参照にすると確かに選択範囲に色はつくのですが、これを相対参照にするとA1のセルしか色がつきません。 また $A1 と、A$1 にしても、色のつく範囲が微妙に変わります。 これはいったいなぜなんでしょう? A1 に入力したら、選択範囲のセルの色が変わるようにすればどうすればいいのでしょう? この A1 は、ほかのセルにコピーしていくので相対参照にしたいです。

  • チェックボックス以外の文字を抽出

    入力用フォームAに複数のチェックボックスとひとつのテキストボックスを配置し、 チェックの入っている項目とテキストボックスに入力した文字を 表示用フォームBの「フィールド1」にまとめて表示させています。 以下のようなイメージです。 <入力用フォームA> ■A □B ■C 【あいうえお】 <表示用フォームB> フィールド1【A C あいうえお】 表示用フォームBのフィールド1から、 テキストボックスで入力させた文字だけ(”あいうえお”) 抽出するにはどうしたらいいでしょうか? 入力用フォームAのチェックボックスとテキストボックスを それぞれ別のフィールドにして、 表示用フォームBで&でつなげて表示させるような構造だったら簡単なのでしょうが チェックボックスもテキストボックスも ひとつのフィールドにまとめてしまっているので どうしたらいいか分かりません。 ご教授よろしくお願いいたします!

  • エクセルの条件付書式について

    A1に「路外 125」、B1に「=RIGHT(A1,3)」の関数が入っていて 現在、B1は「125」と表示されています。 B1の条件付書式は50以上~99までは青表示、第二条件は100以上の時は赤表示と 条件付書式を入れていますがうまくゆきません。 セルに関数が入っている時は条件付書式が使えないのでしょうか? 宜しくお願いします。

  • 条件付書式 エクセル

    いつもお世話になっています。 条件書式で困っています。よろしくお願いします 色を3種類つけたいと思っています。 出席率  2~3 黄色 3~4 青 4~6 ピンク A列に出席率を入力(0~7) B列に氏名 B列に色を入れたくて (1)条件付書式 条件1 数式が =A4<=3 条件2 数式が =A4<=4 条件3 数式が =A4<=6 でやっているのですが・・ 色が変わりません。 よろしくお願いします。

  • ACCESSの条件付書式

    アクセスのデータシートビューで条件付書式ができるのは フォームをデータシートビューで表示したときだけでしょうか? テーブルやクエリでは ツールバーに「書式→条件付書式」は表示されませんが フォームのデータシートビューを開いている時のみ、 「書式→条件付書式」が表示されます。 テーブルやクエリでも条件付書式を設定できる方法があれば教えてください。 よろしくお願いします。

  • エクセル 条件付書式 日付

    こんにちは。エクセルの条件付書式について教えてください。     A    B 1  3/16  回答 2  4/1   未回答 3  5/15  未回答 Aには任意の日付を入力してあります。 Bには適当な文字が入れてあります。 B1にはA1の日付より20日前になったら特定の色を付ける このような場合の数式を教えていただいても宜しいでしょうか? 宜しくお願い致します。

  • 条件付書式

    エクセルで条件付書式を数式で入力しています。 =COUNTIF(N26:BK50,A82) 例えば上記のような形で入力を行なっていますが このN26:BK50の中で赤色の文字だけに 条件付書式を当てはめる事はできないでしょうか? どなたか分かる方宜しくお願いします。 どうしても数ある同じ文字列の中で赤色のA82だけを捜してきたいのですが・・・

専門家に質問してみよう