アプリ版:「スタンプのみでお礼する」機能のリリースについて

アクティブ(カレント)レコードに条件付き書式で色を付けるには?

フォームに乗ってるサブフォームに対して、レコードが移動したら条件付き書式をつけたいです。

サブフォームの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は設定した条件付き書式をフォームビューでは確認できないようです。
フォームビューで設定した条件付き書式は保存されないから、デザインビューで確認しようとしても、見れません。

サブフォームに対して行おうとしているからできないのでしょうか?
どこが間違ってるか教えていただけますか?

ご回答よろしくお願いします。

A 回答 (1件)

まず、間違ってそうな箇所は



"[名前] = """ & Me.Controls("名前") & ""

"[名前] = """ & Me.Controls("名前") & """"

後、条件付き書式を設定できないコントロールは存在しないのでしょうか?


以下、総括的に


カレント行全体の背景色を変えてハイライト表示させるには?
http://www.tsware.jp/tips/tips_392.htm

この内容に合わせるために、苦労されていたのでしょうか

配列にコントロールを求めて・・・されていますが、一気にやられてみてはどうでしょう
例えば、

Private Sub Form_Current()
  Dim ctl As Control

  For Each ctl In Me.Section(acDetail).Controls
    With ctl
      Select Case .ControlType
        Case acTextBox, acComboBox
          With .FormatConditions
            .Delete
            With .Add(acExpression, , "[名前] = """ & Me.名前 & """")
              .BackColor = 255
            End With
          End With
      End Select
    End With
  Next
End Sub

背景色を変えるのは、「詳細」に配置したテキストボックス/コンボボックスだと思うので、
Me.Controls ではなく「詳細」に絞った Me.Section(acDetail).Controls を処理範囲とします。
で、コントロールが、テキストボックス/コンボボックスなら条件付き書式を・・・・

また、以下の様な方法もあります。
フォーム読み込み時に、基本となる条件付き書式を設定しておいて、
(設定したコントロールの目印として Tag に文字列を設定)
レコード移動時では、条件を書き換える・・・・
( Tag に文字列が設定されているコントロールを探し出して・・・)

Private Const SetFMTC As String = "SetFormatConditions"

Private Sub Form_Load()
  Dim ctl As Control

  For Each ctl In Me.Section(acDetail).Controls
    With ctl
      Select Case .ControlType
        Case acTextBox, acComboBox
          With .FormatConditions
            .Delete
            With .Add(acExpression, , "[名前] = """"")
              .BackColor = 255
            End With
          End With
          .Tag = SetFMTC
      End Select
    End With
  Next
End Sub

Private Sub Form_Current()
  Dim ctl As Control

  For Each ctl In Me.Section(acDetail).Controls
    If (ctl.Tag = SetFMTC) Then
      ctl.FormatConditions(0).Modify acExpression, , "[名前] = """ & Me.名前 & """"
    End If
  Next
End Sub


なお、一般的なのか・・・・良く使う方法は

不可視のテキストボックス「txt1」を設置して、
読み込み時にでも、条件付き書式 [名前] = [txt1] を設定しておき、
レコード移動時に、Me.txt1 = Me.名前 を代入
これらをする事で、条件付き書式部分を書き換えなくても実現できるものになります。

Private Sub Form_Load()
  Dim ctl As Control

  For Each ctl In Me.Section(acDetail).Controls
    With ctl
      Select Case .ControlType
        Case acTextBox, acComboBox
          With .FormatConditions
            .Delete
            With .Add(acExpression, , "[名前] = [txt1]")
              .BackColor = 255
            End With
          End With
      End Select
    End With
  Next
End Sub

Private Sub Form_Current()
  Me.txt1 = Me.名前
End Sub


以下、まとめて書かれていますので参考になると思います

カレント行の背景色の変更 その2
http://hatenachips.blog34.fc2.com/blog-entry-20. …

カレント行の背景色の変更
http://hatenachips.blog34.fc2.com/blog-entry-18. …


また、条件付き書式を使わない方法も紹介されてます。

カレント行の背景色の変更 その3
http://hatenachips.blog34.fc2.com/blog-entry-21. …
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2013/08/31 15:51

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A