電子書籍の厳選無料作品が豊富!

以前にも質問してアドバイスを頂き
http://msdn.microsoft.com/ja-jp/library/cc347606 …
をみてやってみたのですが全然うまくいきませんでした。

式 [テーブル1.フィールド1]=True
該当するものの背景を灰色
にしたいのですが
この「テーブル1」は「親フォーム」のサブフォームの中に入っている「子フォーム」上あるものなのです。

Sub test5()
With Forms("子フォーム").Controls("フィールド1").FormatConditions(1)
.BackColor = RGB(255, 255, 255)
End With
End Sub

を実行すると
マクロの式または visual Basic コードで参照されている ’子フォーム’フォームが見つかりません。
のエラーが返ります。

そもそも「親フォーム」「テーブル1」はどこに入れればいいでしょう?

よろしくお願いします。

「【2】 【VBA】アクセス 条件付書式 」の質問画像

A 回答 (5件)

>kurodai2さんには申し訳ありませんが、説明が重複する部分も含めて、通しで説明させて



DexMachinaさん、お気遣いどうもです。

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

条件付書式を設定する前に条件によって
(「Select Case ステートメント」や「If...Then...Else ステートメント」などで)設定を変えたかったのです。

でもなんだかややこしくなってきました。
効率がわるいので一度見直して再度実行してみます。
何度もありがとうございました。

お礼日時:2009/05/12 23:20

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」が重なってややこしいかもしれませんが)
    • good
    • 0
この回答へのお礼

「RGB(255,255,255)」は白なのですね。
いくらやっても変わらないわけです。

回答を読む分にはわかりやすく理解できたのですが
試してみましたがどうしてもできません。

わけもわからずややこしくしているので他所に原因があると思います。
一度整理してから改めて試してみます。
ありがとうございました。

お礼日時:2009/05/12 23:17

Controls("フィールド1").FormatConditions(1)


この部分の(1)は そのコントロールに設定された
条件の何番目を参照するかの様です。
私は、条件を1つしか設定しなかったので、(0)として確認しました。
(1つ目が0 2目が1の様に0スタート)

これは、設定した条件の書式の設定が可能な方法ですが
リアルタイムに動作するのでしょうか?
(試したことはないですが、静的に条件設定しておけない場面が?です)

実際に、色を変えたい条件を 色数分設定しておけば良いと思うのですが
単純に設定できないほど複雑な条件なのでしょうか?

PS.
先の回答 こちらは 2007で試しました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/10 23:36

>式 [テーブル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で 変更した背景色に
書式が変更されたことを確認できました。
    • good
    • 0
この回答へのお礼

再度ありがとうございます。
ちなみにアクセス2003を使用しています。

>上記モジュールはどこに書かれていますか?
標準モジュールに書いていました。

>VBAで色を指定する必要があるのでしょうか?
条件によって色を変えたりしたいのです。

教えていただいたサブフォームに記載して
コードを実行してみました。
エラーにもならないですが色も付かないです。
もうちょっといろいろやってみます。

お礼日時:2009/05/10 19:27

以前の質問と言うのが解りませんが


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

回答ありがとうございます。
え!!おかしいですか!?
VBAを使わずにフォームの条件付書式なら
[テーブル1.フィールド1]=True
でちゃんと色が付くのです。。。

ちなみに
以前の質問はこちらです→http://oshiete1.goo.ne.jp/qa4874751.html

お礼日時:2009/05/10 01:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!