• ベストアンサー

Accessフォーム条件付書式

どなたか教えて下さい。 Access2002を使っています。 フォームの条件付書式を使い売上が100000円以上なら赤に背景色を変えようと思っています。 VBAの勉強の為に、ツールバーの条件付き書式を使わずにvbaで挑戦してみました。 Private Sub Form_Open(Cancel As Integer) If Me.売上.Value >=100000 Then Me.売上.BackColor = RGB(255, 0, 0) End If End Sub 単票形式ならば上手くいくのですが、フォームのデータシートタイプで表示すると反応しません。 但し、ツールバーの条件付き書式からの設定ではデータシートでも反応します。 上記のIF文では条件付書式にはなっていないのでしょうか? helpでDatasheetBackColor プロパティというのを探せましたが、全体の背景色の変更になってしまいます。 ツールバーにあるからには、VBAで出来るだろうと考えるのは間違えでしょうか? もしもデーターシートの条件にあったセルのみ背景色をvbaで変えられることを知っている方、よろしくお願いします。 haru

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

例えば、こんな感じで出来ます。 フォームの「読み込み時」イベントに次のように記述します。 Access VBA のヘルプで FormatConditions オブジェクトを ご覧ください。 Private Sub Form_Load() With Me.Controls("売上").FormatConditions _   .Add(acFieldValue, acGreaterThanOrEqual, "10000")   .BackColor = RGB(255, 200, 200)     .ForeColor = RGB(0, 0, 0) End With End Sub データシートの場合、FormatConditionsを使う以外無いでしょう。

haru_12345
質問者

お礼

間違えて、お礼を補足に書いてしまいました。 ごめんなさい。 ありがとうございました。

haru_12345
質問者

補足

ありがとうございます。 FormatConditionsが条件付書式と言うことを始めて知りました。 また、ご丁寧にコードまで書いていただき感謝します。 HELPでも見つけられましたので、よく研究します。 ありがとうございました。 haru

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

私も素人ですが、考えることを述べさせていただきます。 参考になりますように。 >単票形式ならば上手くいくのですが >フォームのデータシートタイプで表示すると反応しません。 ホンとに、上手く行きますか。 私は下記でテストしました。 Private Sub Form_Current() Me.フィールド3.BackColor = RGB(255, 255, 255) If Me.フィールド3.Value >= 100 Then Me.フィールド3.BackColor = RGB(255, 0, 0) End If End Sub(手持ちデータの関係で質問とフィールド名、条件値を変えています) ---- プログラムが実行されるのは、キッカケを貰わないと動きません。VB・VBAではイベントです。今の場合Form_Open なんです。それはイベントを使っていると言う点で良いでしょう。 そしてFormがOpenされたとして、このルーチンに飛んできます。Me.売上.Value はレコード(各行)の値に関するものです。列(フィールド)全体では意味をなしません。列全体では、行により、10万より大きいのや小さいのがあって、真偽をいえないからです。Me.売上.BackColorも列は指定していて、判るのですが、行が判るものがありません。(私のプログラムでは、「現に読みこんだレコード1つについて」なので、真偽が言えるのです。) もし、フォームをOpenしたら各行を1つずつ、読んであるフィールドの値で判断してくれて、全行を1つずつ処理してくれる機能を持たせてくれていれば、このプログラムで良いでしょう。しかし実際はそうでありません。Formでする(すべき)ことは、フォーム全体について、大きさを変えるとか、色を指定するとかに関することだけのはずです。 >ツールバーの条件付き書式からの設定ではデータシートでも反応します。 ---- このように、ソフトで「操作で何かを行う」時は、レコードの考えを、システムは見えないようにしてしまいます。そして裏で、(前述した)「各行を1つずつ、読んであるフィールドの値で判断してくれて、全行を1つずつ処理してくれる」ことを繰り返しを行います。それは見せず、結果だけ見せます。そのような深いところでのプログラムのし方を勿論MSの技術者は知っていて、多分C++で組んだプログラムが走ります。 エクセルなどでは、マクロという形で提供しているものが あります(例Sortなど)。 >ツールバーにあるからには、VBAで出来るだろうと考えるのは間違えでしょうか? まず間違いではないにしても、今自分がやっているForm_Openで出来るかどうか、知っている範囲のやり方で出来るかとの議論とは違います。 アクセスVBAには何千と言うメソッド・プロパティ・イベントがあります。適切なものを探し出すのが勉強であり、大変です。充分知っている人なら多分VBAでも出きるでしょう。 >IF文では条件付書式にはなっていないのでしょうか? 条件付書式というメソッド(マクロ)がもしあればそれ指すのでしょうが、ない、またはあっても知らないからIF文で処理しようとしたわけです。「なっていない」は「条件付書式と同じ処理にならないのでしょうか?」と聞くべきで、結論からして、ならないのは、質問の事実が証明しています。しかしIF文が間違いと言うわけではないと思います。マクロ様のものがなければ、IF文を使わねばならない でしょう。 >結局データシートタイプの場合の各セルの捉え方を勉強しなければならないと言うことだと思います。エクセルではCells(i,j)のようなものです。あるかないかから調べる必要があります。またそのセルがBackColor プロパティを持っていることが必要です。 私も知らないので勉強します。

haru_12345
質問者

お礼

早々のアドバイスありがとうございます。 最初は何が書いてあるのか理解するのに時間がかかってしまいました。 なるほど私のフォームの1件目の売上が100000円以上なのでそのデータに対し反応し、以降1件目のせいで色が出ているのがわかりました。ちなみに100000以下にしたら反応しなくなりました。大きな発見です。ありがとうございます。do loop と組み合わせて考えて見ます。 丁寧なご回答ありがとうございます。 haru

関連するQ&A

  • ACCESSの条件付書式

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

  • アクセスのフォームのテ゛ータシートヒ゛ューで条件付書式を3つ以上やりたい

    アクセスのフォームのテ゛ータシートヒ゛ューで条件付書式を3つ以上やりたいのですがやはり無理でしょうか? VBAなら可能でしょうか? 諦めるしかないですか?

  • 【VBA】アクセス 条件付書式 (Yes/No型) 

    フォームのデーターシートビューで 「フィールド1(Yes/No型)がTrueなら フィールド2の背景の色をピンクにする」 という条件付書式を行ないたいのですがどうすればいいでしょう? VBAでやりたいのですが難しかったら手作業の処理を教えてくださいませ。 よろしくお願いします。

  • アクセス2000の条件付書式で

    フォームに[旧・日付]と[新・日付] というコントロールを配置しています。 この二つのデータを比較し、値が一致しない場合は条件付式書式で[新・日付]に背景色をつけたいと思っています。 そこでツールの書式→条件付書式で 式   [旧・日付]<>[新・日付] 背景色 ピンク と設定しました。 ところが[旧・日付]にデータが入力されている場合はうまくいくのですが、[旧・日付]が空欄で、[新・日付]のみデータがある場合は認識してくれません。 どのように設定したらうまくいくのでしょうか。 よろしくお願いします。

  • VBAがわかれば条件付書式は不要ですか?

    エクセルにおいて vbaで「Select Case ステートメント」や「If...Then...Else ステートメント」を組める場合 条件付書式は役にたたないですか? 条件付書式のほうが優れている場合もありますか? よろしくお願いします。

  • EXCEL2003 条件付書式が狂ってくる

    条件付書式は、見ためにどのセルに入っているのかわからないというのと、複数の条件付書式が入ると、なぜかその前に決めていた条件付書式が消えてしまっているということがあって、なかなか不便に思っています。(やりかたが悪いのかもと思うのですが) それで、VBAの entireculumn というのを見つけたのですが、 これで対応できるでしょうか? やりたい事は、 1 2*--------------------------- 3*--------------------------- 4 5 6*--------------------------- 7*--------------------------- 上記のように、「*」をつけた行にだけ、行全体に色をつけておく、 というのを条件付書式で、 「数式が」「=$A1="*"」 としたもので、その設定をしているシートに、横にずっと、いろんな関数を入れていってます。 ですが、関数を入れたり、そのプロセスで列挿入などすると、 色がずれてしまうのです。 その回避策として、VBAで最初に色の設定をしておけないでしょうか? 「*がある行だけに色をつける。」 よろしくお願いします。

  • VBAで条件付書式

    アクセス2003なのですが 「色を青にして太字に」するにはどうすればいいでしょうか? Sub 条件付書式() With Form_フォーム1.テキスト2 .ForeColor = RGB(255, 255, 255) With .FormatConditions .Delete .Add(acExpression, , "[テキスト2]=""青にする""").ForeColor = 16711680 '青 End With End With End Sub で青にはなるのですが 青なおかつ太字にするにはどうすればいいでしょうか? FontStyle プロパティを使うのでしょうか? 書き方を教えてください。

  • フォームに条件付書式を設定したいのですが、メニュー

    アクセス2007です。 フォームに条件付書式を設定したいのですが、メニューバーのどこから設定すればいいのでしょうか? フォームタブのフォントを見てみましたが、条件付書式は見当たりませんでした。 ご回答よろしくお願いします。

  • accessの検索フォームについて(複数条件)

    access初心者です。 本などを参考に検索フォームを作成しました。 1つの条件で検索することは出来たのですが、複数の条件を入力するとうまく検索出来ません。 全ての条件を満たすデータの抽出を行いたいと思います。 「あ」「い」「う」というテキストボックスを用意しています。 Private Sub コマンド14_Click() If Not IsNull(Me.txt_あ) Then ' Me.Filter = "あ LIKE '*" & Me!txt_あ & "*'" End If If Not IsNull(Me.txt_い) Then ' Me.Filter = "い LIKE '*" & Me!txt_い & "*'" End If If Not IsNull(Me.txt_う) Then ' Me.Filter = "う LIKE '*" & Me!txt_う & "*'" End If Me.FilterOn = True End Sub よろしくお願いします。

  • 条件付書式・・・?

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

専門家に質問してみよう