• ベストアンサー

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

以前にも質問してアドバイスを頂き ​http://msdn.microsoft.com/ja-jp/library/cc347606.aspx​ をみてやってみたのですが全然うまくいきませんでした。 式 [テーブル1.フィールド1]=True 該当するものの背景を灰色 にしたいのですが この「テーブル1」は「親フォーム」のサブフォームの中に入っている「子フォーム」上あるものなのです。 Sub test5() With Forms("子フォーム").Controls("フィールド1").FormatConditions(1) .BackColor = RGB(255, 255, 255) End With End Sub を実行すると マクロの式または visual Basic コードで参照されている ’子フォーム’フォームが見つかりません。 のエラーが返ります。 そもそも「親フォーム」「テーブル1」はどこに入れればいいでしょう? よろしくお願いします。

  • fsjkls
  • お礼率99% (430/432)

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

  • ベストアンサー
  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.5

>kurodai2さんには申し訳ありませんが、説明が重複する部分も含めて、通しで説明させて DexMachinaさん、お気遣いどうもです。 fsjklsさん、1点補足してください。 最初からフィールド1に静的に、たとえば3通りの条件付書式を設定しておくことと、DexMachinaさんのコードの様にopen時に、フィールド1に設定し直す必要はどんな場面であるのでしょうか? この部分が、理解しかねています。 open時に書いたのは、確認し易いのでしましたが、本来の目的は どの場面で再設定の必要がある仕様なのでしょう? 私、実はそこが見えていません。

fsjkls
質問者

お礼

条件付書式を設定する前に条件によって (「Select Case ステートメント」や「If...Then...Else ステートメント」などで)設定を変えたかったのです。 でもなんだかややこしくなってきました。 効率がわるいので一度見直して再度実行してみます。 何度もありがとうございました。

その他の回答 (4)

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

kurodai2さんには申し訳ありませんが、説明が重複する部分も含めて、通しで説明させて戴きます。 (中途半端に話を引き継ぐと、多分かえってわかりにくくなってしまうと思うので) サブフォームに使用しているフォームの「開くとき」イベントに以下を設定: Private Sub Form_Open(Cancel As Integer) On Error GoTo エラー処理   With Me!フィールド1     '条件を満たさない場合のデフォルトの背景色(白)を設定     .BackColor = RGB(255, 255, 255)     With .FormatConditions       '一旦、条件付書式を削除(フィールド1の条件付書式が幾つあっても一括削除)       .Delete       '条件付書式を改めて追加       .Add(acExpression, , "[フィールド1]=1").BackColor = RGB(200, 200, 200)  '灰色       '条件付書式を追加する場合は以下のように追加(最大3件)       '.Add(acExpression, , "[フィールド1]=2").BackColor = RGB(255, 0, 0)     '赤色       '.Add(acExpression, , "[フィールド1]=3").BackColor = RGB(0, 255, 0)     '緑色     End With   End With 終了処理:   Exit Sub エラー処理:   Select Case Err     Case 2439  '条件付書式が未設定なのに削除しようとした場合 → エラー発生箇所の次の処理に戻る       Resume Next     Case Else  '上記以外のエラーの場合 → エラーメッセージを表示して処理を中止       MsgBox Err & ":" & Error$, , Me.Name & " Open"       Resume 終了処理   End Select End Sub ・・・以上です。 【注意・参考】  1)「RGB(255,255,255)」は、「白」になります(kurodai2さんがNo.2の末尾で間接的に指摘済み)。   グレーを指定する場合は、上記のように「RGB(200,200,200)」等と指定してください。   (暗くする場合は値を小さく(最小0(×3)で黒)、明るくする場合は大きく(最大255(×3)で白)します)  2)ご質問の例では条件を「フィールド1=True」とするとのことでしたが、テキストボックス上では   ちょっとややこしいことになるので、数字の例に変えさせていただきました。   (「~=True」とした場合、条件が成立するのはテキストボックスに「-1」を入力した場合で、    「True」と入力した場合は不成立となるため(→条件式が「~="True"」だったら成立))  3)単に背景色をグレーにするだけなら上記の通り「BackColor」でOkですが、使用を不可に   したい場合は    .Add(acExpression, , "[フィールド1]=1").Enabled=False   と「Enabled」を使用します。  4)背景色だけでなく文字色なども切り替えたいという場合は、上記の    .Add(~).BackColor=RGB(~)   の行を、    With .Add(~)      .BackColor = RGB(~)      .ForeColor = RGB(~)    End With   という形にする必要があります。(「With~End With」が重なってややこしいかもしれませんが)

fsjkls
質問者

お礼

「RGB(255,255,255)」は白なのですね。 いくらやっても変わらないわけです。 回答を読む分にはわかりやすく理解できたのですが 試してみましたがどうしてもできません。 わけもわからずややこしくしているので他所に原因があると思います。 一度整理してから改めて試してみます。 ありがとうございました。

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.3

Controls("フィールド1").FormatConditions(1) この部分の(1)は そのコントロールに設定された 条件の何番目を参照するかの様です。 私は、条件を1つしか設定しなかったので、(0)として確認しました。 (1つ目が0 2目が1の様に0スタート) これは、設定した条件の書式の設定が可能な方法ですが リアルタイムに動作するのでしょうか? (試したことはないですが、静的に条件設定しておけない場面が?です) 実際に、色を変えたい条件を 色数分設定しておけば良いと思うのですが 単純に設定できないほど複雑な条件なのでしょうか? PS. 先の回答 こちらは 2007で試しました。

fsjkls
質問者

お礼

う~ん どうもうまくできませんでした。 多分私がわけわからないくせに複雑にしているからだと思います。 なのでちょっと整理してみます。 何度もお付き合いいただきありがとうございます。

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.2

>式 [テーブル1.フィールド1]=True こちらの環境ではダメですが 親フォームや子フォームの名称など正確に再現できているわけではないので置いておきます。 Sub test5() With Forms("子フォーム").Controls("フィールド1").FormatConditions(1) .BackColor = RGB(255, 255, 255) End With End Sub 上記モジュールはどこに書かれていますか? こちらで確認したのは、サブフォームのフォームをデザインで開き フォームを開くときのイベントに記述しました With Me.Controls("フィールド1").FormatConditions(0) .BackColor = RGB(255, 255, 255) End With 子フォームに書くのであれば、me.でいけます 前提として、条件付き書式が設定してある必要があるので あえて、VBAで色を指定する必要があるのでしょうか? 目的がよくわかりませんが、テストでは 最初 背景色赤の設定にして、VBAで 変更した背景色に 書式が変更されたことを確認できました。

fsjkls
質問者

お礼

再度ありがとうございます。 ちなみにアクセス2003を使用しています。 >上記モジュールはどこに書かれていますか? 標準モジュールに書いていました。 >VBAで色を指定する必要があるのでしょうか? 条件によって色を変えたりしたいのです。 教えていただいたサブフォームに記載して コードを実行してみました。 エラーにもならないですが色も付かないです。 もうちょっといろいろやってみます。

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.1

以前の質問と言うのが解りませんが 少なくとも、 [テーブル1.フィールド1]=True この[]の書き方はおかしい 条件付き書式が、サブフォーム云々に影響された記憶がないのですが 単純に、先ず、サブフォームに割り当てているフォームだけで テストされてはどうでしょう 背景色を変えたいテキストボックスを選択し条件付き書式で 式 [フィールド1]=True で、背景色の設定 これだけで問題ないと思いますが・・ (以前の質問のURLが解れば補足してください)

fsjkls
質問者

お礼

回答ありがとうございます。 え!!おかしいですか!? VBAを使わずにフォームの条件付書式なら [テーブル1.フィールド1]=True でちゃんと色が付くのです。。。 ちなみに 以前の質問はこちらです→http://oshiete1.goo.ne.jp/qa4874751.html

関連するQ&A

  • 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 プロパティを使うのでしょうか? 書き方を教えてください。

  • アクセス複数の条件で同じ書式をつけるには?

    条件付き書式です。(しかもVBAです) 一つのフィールドに対して違う条件だけど同じ書式をつけたい時、 まとめる事は出来ないのでしょうか? 例えばフォールド1の「あ」と「い」を赤にしたい場合、 Sub test01() Dim Field As String Dim MyFormName As String MyFormName = "フォーム" Field = "フィールド1" With Forms(MyFormName).Controls(Field) With .FormatConditions .Delete With .Add(acExpression, , "[" & Field & "]=""あ""" And "[" & Field & "]=""い""") .ForeColor = 225 End With End With End With End Sub のような事は出来ないのでしょうか? これをすると 実行時エラー:型が一致しません。(Error 13) になります。 素直に、 Sub test02() Dim Field As String Dim MyFormName As String MyFormName = "フォーム" Field = "フィールド1" With Forms(MyFormName).Controls(Field) With .FormatConditions .Delete With .Add(acExpression, , "[" & Field & "]=""あ""") .ForeColor = 225 End With With .Add(acExpression, , "[" & Field & "]=""い""") .ForeColor = 225 End With End With End With End Sub としなくちゃダメでしょうか? 何故こんな事がしたいかと言うと、3つ以上やりたい条件がありので、 同じ書式のものはまとめたいのです。 ご教授よろしくお願いします。

  • Withでサブフォームの条件付き書式を設定する為に

    親フォームなら With Me(avarContorol(i)).FormatConditions でできるのですが、親フォームに埋め込まれているサブフォームをwithで指定する場合、 どのようにすればいいでしょうか? With Forms(Me.Parent.Name).Controls(Me.Name).Form(avarContorol(i)).FormatConditions With Forms(Me.Parent.Name).Controls(Me.Name)(avarContorol(i)).FormatConditions With Forms(Me.Parent.Name).Controls(Me.Name).Form.Controls(avarContorol(i)).FormatConditions 全てエラーになってしまいます。 いろんなサブフォームに応用したいため、Me.NameとMe.Parent.Nameでフォーム名を取得したいです。

  • 「フォーカスのあるフィールドに色を付ける」vba

    帳票フォームの全てのコントロールに 条件付き書式で 「フォーカスのあるフィールドに色を付ける」を行いたいのですが コントロールが多すぎる為VBAでループさせたいのですがコードがわかりません。 http://www.tsware.jp/tips/tips_187.htm これをVBAで行いたいです。 VBAでの条件付き書式は Sub Sample() Dim Field As String Dim myFormName As String With Forms(myFormName).Controls(Field) With .FormatConditions .Delete With .Add(acExpression, , "[" & Field & "]=""あ""") .BackColor = 225 End With End With End With End Sub こんな感じで出来る事は知ってますが、 vbaで「フォーカスのあるフィールドに」と言う条件の付け方がわからないので教えてください。

  • ACCESSの条件付書式について

    カテゴリフィールドには、3つのカテゴリが存在します。 「重要」「情報共有」「緊急」です。 そのフィールドはルックアップ列を用いてテーブルに入力されています。 そのテーブルから、サブフォームを作成し、一覧を表示させているのですが、「重要」や「緊急」のカテゴリのときだけ、色をつけたいのです。 ・・・が。条件付書式がうまくいきません。 IIF([カテゴリ]="重要",TRUE,FALSE) のように設定したりしてるのですが、うまくいきません。何が間違っているのでしょうか。 もし他の条件式などでうまく行くようであれば、そちらでもかまわないのですが、教えていただけますでしょうか。

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

    アクティブ(カレント)レコードに条件付き書式で色を付けるには? フォームに乗ってるサブフォームに対して、レコードが移動したら条件付き書式をつけたいです。 サブフォームの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は設定した条件付き書式をフォームビューでは確認できないようです。 フォームビューで設定した条件付き書式は保存されないから、デザインビューで確認しようとしても、見れません。 サブフォームに対して行おうとしているからできないのでしょうか? どこが間違ってるか教えていただけますか? ご回答よろしくお願いします。

  • 条件付書式をVBAでセルに設定するときのルール

    図のような列があります。 C列にこだわっているわけではないのですが、その左側にある列で計算をしているという意味で、A、B列はあけただけです。 で、IF文で計算してある条件に合致するとC列で「TRUE」を表示し、合致していない場合はそのときの計算結果を表示させています(IF文的に正しくないので、計算したままの値が計算結果として表示される)。 この結果の見せ方として、これまではC列に「条件付書式」を手動で設定し、文字がTRUEのとき字を青くする表示にしていたのですが、同様の処理を行うExcel Bookファイルが多いため、VBAで条件書式を設定しようとし、次のような記述を実行しました。 すると、図のような結果になりました。 ---------------------------------------------- Sub TestSample() Dim i As Long i = 20 '実際には最終行はBookによって異なるので、 ’行末検索させせていますが、とりあえずここでは20としておきます。 With ActiveSheet Range(Cells(2, 3), Cells(i, 3)).Select With Selection     FormatConditions.Add Type:=xlTextString, String:="TRUE", _     TextOperator:=xlContains     .FormatConditions(1).Font.Color = RGB(0, 50, 255) ’ーーA     .FormatConditions(1).Interior.TintAndShade = 0   ’ーーB End With End With End Sub ---------------------------------------------- 質問が2つあります。 1. 背景がいわゆる「色なし」ではなく白くなっていますが、背景「色なし」かつ「罫線でかこむ」には、どのような記述をすればよいでしょうか 2. FormatConditions.Add Type:~~~~ につづく別の行(Aのところ)に「FormatConditions.」と記述すると実行できません。 マクロで条件書式の自動記録をやって参考にしたところ、添値のような(1)が記録されることに気が付き、それを真似して FormatConditions(1). としたところ、動作しました。 最初だけFormatConditionsで、なぜAのところはFormatConditions(1).となるのか、またAとBはどちらも「FormatConditions(1).」でダブっているのに処理上エラーを返さないのか、理屈がわかりません。 (1)がつく意味と、AとBはどちらも(1)で(ダブっても)動作するのか(逆にいえば、なぜ最初のFormatConditionsだけ、番号がついていないのか、たぶんデフォルトで(0)の意味?) について、このへんの仕組みの解説をよろしくお願いします。

  • 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

  • 複数の条件付書式

    B列に1~5までに数字がランダムにはいっています。 条件は ・B列が空白ならA列は無色 ・B列が1ならA列は赤 ・B列が2ならA列は青 ・B列が3ならA列は黄色 ・B列が4ならA列は緑 というのをマクロで行ないたいです。 自分で記録して Sub Macro32() Columns("A:A").Select Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=B1=""""" Selection.FormatConditions(1).Interior.Pattern = xlNone Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=B1=1" Selection.FormatConditions(2).Interior.ColorIndex = 38 Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=B1=2" Selection.FormatConditions(3).Interior.ColorIndex = 40 End Sub 4つ目に Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=B1=3" Selection.FormatConditions(4).Interior.ColorIndex = 32 とするとエラーになります。 3つ以上の条件付書式の書き方を教えてください。 あとこの構文のSelectionはwithで省略できますか? よろしくお願いします。

  • サブフォームにフィルタをかけたい

    サブフォームにフィルタをかけたいのですが エラーになってしまいます。 下記がエラー内容です。 ---------------------------------------------------------- 実行時エラー 438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。 ---------------------------------------------------------- 細かい概要は テーブル1にフィールドがあり、 レコードには「あああ」と入力されています。 テーブル1がレコードソースとされている「フォーム(2)」をサブフォームとして 親フォーム(フォーム名:フォーム(1))に乗せました。 フォーム(1)を開いた時にフォーム(2)にフィルタをかけたいのですが うまくいきません。 オブジェクト名にカッコを付けているため、 Form_フォーム・・・・ というコードは書けないので ---------------------------------------------------------- Private Sub Form_Open(Cancel As Integer) Forms("フォーム(1)").Controls("フォーム(2)").Form.Filter = "フィールド = '" & "*あ*" & "'" Forms("フォーム(1)").Controls("フォーム(2)").FilterOn = True End Sub ---------------------------------------------------------- としています。 Forms("フォーム(1)").Controls("フォーム(2)").FilterOn = True でエラーになりますが、 この行をなくしたら、フィルタがかかりません。 どうすればサブフォームにフィルタをかける事が出来るのでしょうか? ご教示よろしくお願い致します。

専門家に質問してみよう