• 締切済み

Accessサブフォームの条件による背景色変更

色々調べてみましたが、探し方が悪いのか見つからず何かヒントでも頂けたらと思います。 はじめて投稿します。よろしくお願いします。 Access2007です。 Accessのサブフォーム(データシート)の背景色をデータの種類によって色分けしたいと 思っております。条件付き書式では3つまでしか設定できないのでVBAで対応しないといけない のかなと思っております。条件付き書式に複数設定する方法があれば楽ですが。 条件としては、 入なら赤、外ならオレンジ、Sならグリーン、Pまたは苗字ならブルー、Oならイエロー というふうな感じです。で、例えば、Pという文字列がくれば無条件に 同じ行で続けて12列同じ色にしたいのです。 見た目で1列5分として12列で60分の枠をPは取ったという具合です。伝わりますか? これをVBAで記述しようと思えばどうなりますか? With Me.Sub.Form.Recordset Do Until .EOF If Me.Sub.Controls(2).Value="入" then Me.Sub.Controls(2).BackColor=vbRed 隣りの行にいくにはどう書きますか? .MoveNext Loop 上のように試してみましたが、エラー出ずとも変化なしでした。 伝え方が下手くそでしたらすいません。どなたかご教示願います。

みんなの回答

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.1

回答が付かないようなので、大雑把なアドバイスをします。 サブフォームはそれだけで完結した表示対象なので、個々の枠内の色を変えることはできないと思います。 どうしても、個別にしたいのならば、サブフォームの内容を再現するフォームに連動したクエリを作成し、そのクエリを表示する独自の表表示のデザインと操作関数を作成して行うことになるでしょう。 その独自の表を上書きできるようにできるのかは、作ってみなけれ分からないことでしょう。 もう一つ別のやり方は、表示はそのサブフォームのままで、重ねるように複数の透明なテキストボックスを載せて、色づけしたい位置のテキストボックスの色付けと透明度の変更をするような方法が考えられます。

lienciel
質問者

お礼

seastar3様 ご回答ありがとうございます。 やっぱり無理ですかね。テキストボックスを重ねるのは考えたこともあるのですが、 表示内容が多いため面倒だと思いやめました。 今少しずつ色々な方法を試しながら進めております。たぶん進んでいると思います。 「サブフォームの内容を再現するフォームに連動したクエリを作成し・・・」のところは 参考にさせていただきたいと思います。 ありがとうございました。また何かありましたらよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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

  • アクセスのレポートの背景を日付で変更したい

    アクセス2002を使用しています。 レポートで計測日、計測場所、品名、大きさ・・・・など項目があり、 計測場所が大阪で、計測日が2012/6/27~今日まで(Date())のデータがある行の 背景色を変更したいのです。 計測場所が大阪の場合は簡単に出来たのですが 日付が入ると訳が分からなくなってしまいました。 計測場所のみの場合下記のようなVBAになっています。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) If Me!計測場所 = "大阪" Then Me.Section(acDetail).BackColor = RGB(255, 0, 255) Else Me.Section(acDetail).BackColor = RGB(255, 255, 255) End If End Sub

  • うまくできない??NO2

    Private Sub P1_Click(Index As Integer) If Index = 1 Or 2 Or 3 Or 4 Or 5 Then If P1(1).BackColor = vbRed Then P1(1).BackColor = vbBlue Else P1(1).BackColor = vbRed End If If P1(2).BackColor = vbRed Then P1(2).BackColor = vbBlue Else P1(2).BackColor = vbRed End If If P1(3).BackColor = vbRed Then P1(3).BackColor = vbBlue Else P1(3).BackColor = vbRed End If If P1(4).BackColor = vbRed Then P1(4).BackColor = vbBlue Else P1(4).BackColor = vbRed End If If P1(5).BackColor = vbRed Then P1(5).BackColor = vbBlue Else P1(5).BackColor = vbRed End If '------------------------------------------------------------------- ElseIf Index = 6 Or 7 Or 8 Or 9 Or 10 Then ~~~~~ 省略 ElseIf Index = 21 Or 22 Or 23 Or 24 Or 25 Then If P1(21).BackColor = vbRed Then P1(21).BackColor = vbBlue Else P1(21).BackColor = vbRed End If If P1(22).BackColor = vbRed Then P1(22).BackColor = vbBlue Else P1(22).BackColor = vbRed End If If P1(23).BackColor = vbRed Then P1(23).BackColor = vbBlue Else P1(23).BackColor = vbRed End If If P1(24).BackColor = vbRed Then P1(24).BackColor = vbBlue Else P1(24).BackColor = vbRed End If If P1(25).BackColor = vbRed Then P1(25).BackColor = vbBlue Else P1(25).BackColor = vbRed End If End If '------------------------------------------------------------------ 続く・・・ 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418248

  • うまくできない??NO3

    If Index = 1 Or 6 Or 11 Or 16 Or 21 Then If P1(1).BackColor = vbRed Then P1(1).BackColor = vbBlue Else P1(1).BackColor = vbRed End If If P1(6).BackColor = vbRed Then P1(6).BackColor = vbBlue Else P1(6).BackColor = vbRed End If If P1(11).BackColor = vbRed Then P1(11).BackColor = vbBlue Else P1(11).BackColor = vbRed End If If P1(16).BackColor = vbRed Then P1(16).BackColor = vbBlue Else P1(16).BackColor = vbRed End If If P1(21).BackColor = vbRed Then P1(21).BackColor = vbBlue Else P1(21).BackColor = vbRed End If '-------------------------------------------------------------------- ElseIf Index = 2 Or 7 Or 12 Or 17 Or 22 Then ~~~省略 ElseIf Index = 5 Or 10 Or 15 Or 20 Or 25 Then If P1(5).BackColor = vbRed Then P1(5).BackColor = vbBlue Else P1(5).BackColor = vbRed End If If P1(10).BackColor = vbRed Then P1(10).BackColor = vbBlue Else P1(10).BackColor = vbRed End If If P1(15).BackColor = vbRed Then P1(15).BackColor = vbBlue Else P1(15).BackColor = vbRed End If If P1(20).BackColor = vbRed Then P1(20).BackColor = vbBlue Else P1(20).BackColor = vbRed End If If P1(25).BackColor = vbRed Then P1(25).BackColor = vbBlue Else P1(25).BackColor = vbRed End If End If '--------------------------------------------------------------------- End Sub ※みにくくてすいません リンクを張るのは禁止らしいので・・・できないですね・・・ 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418248 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418250

  • ACCESS サブフォームについて

    □ACCESS 2003 ACCESS VBA初心者です。 処理方法が判らず、行き詰ってしまったので質問させて下さい。 サブフォームの中にテーブルのレコードを表示させ、 レコードの内容によって対象のレコード行の列の制御をしたいのですが Bookmarkで対象行の取得までは何とか辿りついたのですが、 対象行の制御が上手く行きません。どのようにすれば良いでしょうか? ご教授お願いします。 サブフォームはレコードソースにてテーブルを参照しています。 テーブルの項目は[従業員コード],[従業員名],[就業区分],[支給区分]の4列です。 就業区分はテキスト型、支給区分はYes/No型で、 就業区分内には「正社員」「準社員」「その他」があり、 「その他」の場合、支給区分のEnableを無効にしたいです。 '---対象行を取得した際に飛ぶメソッド Private Sub SetFieldPropaties(bkm As Variant) Me.Bookmark = bkm If Me.就業区分 = "未確定" Then Me.就業区分.ForeColor = RGB(255, 0, 0) Me.支給区分.Enabled = False Else Me.就業区分.ForeColor = RGB(0, 0, 0) Me.支給区分.Enabled = True End If End Sub Me.就業区分とMe.支給区分の2項目の変更が上手い事行かないです… 情報が少なければご指摘ください。よろしくお願いします。

  • アクティブ(カレント)レコードに条件付き書式で

    アクティブ(カレント)レコードに条件付き書式で色を付けるには? フォームに乗ってるサブフォームに対して、レコードが移動したら条件付き書式をつけたいです。 サブフォームのCurrentイベントに ////////////////////////////////////////////////////// Private Sub Form_Current() Dim avarContorol As Variant Dim iLoop As Integer Dim ctl As Control Dim mystr As String Dim i As Integer ReDim avarControl(Me.Controls.Count - 1) For i = 0 To Me.Controls.Count - 1 avarControl(i) = Me.Controls(i).Name Next i For iLoop = 0 To UBound(avarControl) With Me.Controls(avarControl(iLoop)).FormatConditions .Delete 'コントロールが文字列型ならダブルコーテーションでくくる With .Add(acExpression, , "[名前] = """ & Me.Controls("名前") & "") .BackColor = 255 End With End With Next iLoop End Sub ////////////////////////////////////////////////////// としたのですが、エラーにもならないけど、色もつかないです。 予想としては赤になると思ったのですが・・・ しかも、2010は設定した条件付き書式をフォームビューでは確認できないようです。 フォームビューで設定した条件付き書式は保存されないから、デザインビューで確認しようとしても、見れません。 サブフォームに対して行おうとしているからできないのでしょうか? どこが間違ってるか教えていただけますか? ご回答よろしくお願いします。

  • Accessサブフォームの入力可否について

    環境 Windows7 64bit Access2010 Accessのフォームをデータシートビューで開いた際に、行ごとにあるフィールドの値を見て、 入力可否を操作することは可能でしょうか。 たとえば、A列とB列が存在した場合、以下のような設定をしたいと思います。 A列が1なら、B列は入力可能 A列が2なら、B列は入力不可 といった感じです。 サブフォーム自体はテーブルと連結していて、入力不可なら(=A列が2なら) B列を着色するという条件付き書式を設定しています。(動作確認はまだですが・・・)

  • サブフォームに条件付き書式 開いたらちらつく

    アクセスで、サブフォームに条件付き書式を設定しているフォームを他のフォームから開くと、 どこかのコントロールをクリックするまでずっと画面がちらつきます。 win7・オフィス2010ですが、これは仕様でしょうか? どこかのコントロールを触ったり、マウスカーソルを動かすと、ちらつきが解除されます。

  • ACCESSで条件によってサブフォームを非表示に

    Accessの初心者です。よろしくお願いします。 Accessで住所録を作っています。 メインフォームは主に本人のデータを表示し、サブフォームで家族の データを表示するようにしました。 その時、家族がいない人についてはサブフォーム自体を表示しないようにしたいと思います。 そこで下記のようにしましたがうまくいきませんでした。 (1)サブフォーム内で家族の人数をカウントする。 (2)このカウント結果をメインフォームに表示する。(メインフォーム にテキストボックスを配置し、コントロールソースをサブフォームの 人数カウントにする。)     ここまではうまくいきました。 (3)ここでメインフォームのイベントの「開くとき」に以下のように記 述しました。(メインフォームのテキストボックスにカウントという  名前をつけました。) Private Sub Form_Open(Cancel As Integer) If Me!カウント = 0 Then サブフォーム.Visible = False Else サブフォーム.Visible = True End If End Sub この記述の仕方がまずいと思うのですが、どのようにすればよいか 分りません。よろしくお願いします。

  • アクセスのラベルの背景色が設定できない

    アクセス2010なのですが Sub test() Dim FormName As String FormName = "F明細" Forms(FormName).Label_取引日.BackColor = RGB(255, 100, 255) End Sub を実行しても、背景色:色なし のままなのですが、どうやったら設定できるのでしょうか? ForeColorの設定はvbaで可能でした。よろしくお願いします。

このQ&Aのポイント
  • 半年間使用していなかったパソコンを起動したら、アップデートを要求するCABファイルが破損していると表示されています。このエラーの対処方法を教えてください。
  • ソースネクスト株式会社の製品・サービスを利用している際に、アップデートができない問題が発生しました。パソコンを起動するとCABファイルが破損しているというエラーメッセージが表示されます。どうすればアップデートを完了させることができるのでしょうか。
  • お久しぶりにパソコンを使用しようとしたら、アップデートが必要なようです。しかし、CABファイルが破損しているというエラーメッセージが表示されています。このエラーに遭遇したことがある方は、どのように対処されましたか?教えてください。
回答を見る