
以前にも質問してアドバイスを頂き
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」はどこに入れればいいでしょう?
よろしくお願いします。

No.5ベストアンサー
- 回答日時:
>kurodai2さんには申し訳ありませんが、説明が重複する部分も含めて、通しで説明させて
DexMachinaさん、お気遣いどうもです。
fsjklsさん、1点補足してください。
最初からフィールド1に静的に、たとえば3通りの条件付書式を設定しておくことと、DexMachinaさんのコードの様にopen時に、フィールド1に設定し直す必要はどんな場面であるのでしょうか?
この部分が、理解しかねています。
open時に書いたのは、確認し易いのでしましたが、本来の目的は
どの場面で再設定の必要がある仕様なのでしょう?
私、実はそこが見えていません。
条件付書式を設定する前に条件によって
(「Select Case ステートメント」や「If...Then...Else ステートメント」などで)設定を変えたかったのです。
でもなんだかややこしくなってきました。
効率がわるいので一度見直して再度実行してみます。
何度もありがとうございました。
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」が重なってややこしいかもしれませんが)
「RGB(255,255,255)」は白なのですね。
いくらやっても変わらないわけです。
回答を読む分にはわかりやすく理解できたのですが
試してみましたがどうしてもできません。
わけもわからずややこしくしているので他所に原因があると思います。
一度整理してから改めて試してみます。
ありがとうございました。
No.3
- 回答日時:
Controls("フィールド1").FormatConditions(1)
この部分の(1)は そのコントロールに設定された
条件の何番目を参照するかの様です。
私は、条件を1つしか設定しなかったので、(0)として確認しました。
(1つ目が0 2目が1の様に0スタート)
これは、設定した条件の書式の設定が可能な方法ですが
リアルタイムに動作するのでしょうか?
(試したことはないですが、静的に条件設定しておけない場面が?です)
実際に、色を変えたい条件を 色数分設定しておけば良いと思うのですが
単純に設定できないほど複雑な条件なのでしょうか?
PS.
先の回答 こちらは 2007で試しました。
う~ん
どうもうまくできませんでした。
多分私がわけわからないくせに複雑にしているからだと思います。
なのでちょっと整理してみます。
何度もお付き合いいただきありがとうございます。
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で 変更した背景色に
書式が変更されたことを確認できました。
再度ありがとうございます。
ちなみにアクセス2003を使用しています。
>上記モジュールはどこに書かれていますか?
標準モジュールに書いていました。
>VBAで色を指定する必要があるのでしょうか?
条件によって色を変えたりしたいのです。
教えていただいたサブフォームに記載して
コードを実行してみました。
エラーにもならないですが色も付かないです。
もうちょっといろいろやってみます。
No.1
- 回答日時:
以前の質問と言うのが解りませんが
少なくとも、
[テーブル1.フィールド1]=True
この[]の書き方はおかしい
条件付き書式が、サブフォーム云々に影響された記憶がないのですが
単純に、先ず、サブフォームに割り当てているフォームだけで
テストされてはどうでしょう
背景色を変えたいテキストボックスを選択し条件付き書式で
式 [フィールド1]=True
で、背景色の設定
これだけで問題ないと思いますが・・
(以前の質問のURLが解れば補足してください)
回答ありがとうございます。
え!!おかしいですか!?
VBAを使わずにフォームの条件付書式なら
[テーブル1.フィールド1]=True
でちゃんと色が付くのです。。。
ちなみに
以前の質問はこちらです→http://oshiete1.goo.ne.jp/qa4874751.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス データエクスポート...
-
「年」と「月」だけの日付の表...
-
Accessの桁区切りについ...
-
アクセスのクエリで秒→時間、時...
-
アクセスでフィールドを分けて...
-
Word2010の差込印刷で金額にコ...
-
日付型のフィールドに空白を入...
-
Excleピボットでデータのない部...
-
差込印刷での全角表示について...
-
エクセルデータをワードで差し...
-
アクセスで空白がグループ化さ...
-
アクセスで追加した項目に全て...
-
Accessで、1つの項目に複数の...
-
アクセスのエラー「クエリには...
-
ACCESS 重複データを1...
-
ファイルメーカーのCase関数で
-
ACCESSユニオンクエリから新テ...
-
VBA 別シートの同じ日付の欄に...
-
ACCESSでの文字数カウント
-
ピボットでの時間集計
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessの桁区切りについ...
-
「年」と「月」だけの日付の表...
-
アクセス データエクスポート...
-
アクセス クエリ 時間の合計
-
Word2010の差込印刷で金額にコ...
-
フォーム データシートビューで...
-
アクセスのクエリで秒→時間、時...
-
アクセス集計クエリでの書式設定
-
ワードで入力できる文字数を制...
-
アクセスのフォームで、桁数を...
-
AccessVBAでフィールドのデータ...
-
アクセスで西暦データを和暦表...
-
Accessでの入力規則について
-
Access2016 フォームで特定の文...
-
【Access2003】書式設定(Forma...
-
Access テキスト型を日付/時刻...
-
アクセス2003で、数値のプロパ...
-
access2007 日付 全角
-
「yyyy/mm/dd hh:mm」が「yyyy/...
-
【2】 【VBA】アクセス 条...
おすすめ情報