• ベストアンサー

【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」はどこに入れればいいでしょう? よろしくお願いします。

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

  • ベストアンサー
  • 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