2010-11-26 6 views
0

フォームのコントロールの背景色を正常に設定するコードを使用しています。そして、私は必要なフィールドなどの背景色を設定するには、コードの類似したビットを使用する。..再帰を使用してフォームのコントロールプロパティを設定するデータシートサブフォームの問題

Public Sub colCtrlNorm(frm As Form) 

Dim setColour As String 
setColour = RGB(252, 252, 252) 
Dim ctl As Control 
For Each ctl In frm.Controls 
    With ctl 
     If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or   ctl.ControlType = acListBox Then 
    ctl.BackColor = setColour 
    ElseIf ctl.ControlType = acSubform Then 
     colCtrlNorm frm(ctl.Name).Form 
    End If 
End With 
Next ctl 
Set ctl = Nothing 

End Sub 

すべてがデータシートを入れ子になったサブフォームを含むフォームを除いて罰金とダンディに動作します。私は、次のエラーメッセージが表示されますエラートラップするとき

は:

Error 2455: You entered an expression that has an invalid reference to the property Form/Report 

を私は私は、データシートのコントロールの背景色を変更傾ける感謝しています。この問題は、ネストされたデータシートでのみ発生します。どのように私はこれを回避することができますかについての任意のアイデア?

この問題のお手伝いをしていただきありがとうございます。

乾杯 ノエル

+1

私はそれが正しいと分かっていれば回答を投稿したいと思いますが、サブフォームコントロールの親がデータシートビューにあるかどうかを確認し、そうであればスキップしてください。データシートはフォームなので、サブデータシートはサブフォームですが、データシートビューのフォームの子フォームです。 –

+0

@Davidはい、デフォルトのビューがデータシートであるかどうかをチェックすることで動作します – noelmcg

答えて

1

チェックがある場合、サブフォームを回避し、以下を使用して作業を手に入れましたサブフォームコントロールはデータシートビューにあり、その場合はスキップします。データシートはフォームなので、サブデータシートはサブフォームですが、データシートビューのフォームの子フォームです。サブフォームの.CurrentViewプロパティを使用します。

あなたはacCurrentView列挙型の一部である名前付き定数を使用することができます

acCurViewDatasheet = 2 
    acCurViewDesign = 0 
    acCurViewFormBrowse = 1 
    acCurViewPivotChart = 4 
    acCurViewPivotTable = 3 
    acCurViewPreview = 5 

もちろん、それらのいくつかは、フォームではなく、レポートには適用されませんが、彼らはまだ動作します。

0

EDIT

は、それが親のかどうかを確認するためにdefaulyビューは、データシートは(2)

Public Sub colCtrlNorm(frm As Form) 

Dim setColour As String 
setColour = RGB(252, 252, 252) 
Dim ctl As Control 
For Each ctl In frm.Controls 
    With ctl 
     If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or   ctl.ControlType = acListBox Then 
    ctl.BackColor = setColour 
     ElseIf ctl.ControlType = acSubform Then 
      If ctl.Form.DefaultView <> 2 Then 
       colCtrlNorm frm(ctl.Name).Form 
      End If 
     End If 
    End With 
Next ctl 
Set ctl = Nothing 

End Sub 
+1

保存されたプロパティは実行時にオーバーライドできるので、DefaultViewではなくCurrentViewをチェックしたいと思います。 –

+0

乾杯ダビデは理にかなっています。 – noelmcg

関連する問題