私はvbaに若干の変更がありました。2013年の条件付き書式設定メニューよりも幾分複雑な条件付き書式を作成しようとしています。私は22の目標日付と実際の日付フィールドを持つフォームを持っています。各ペアのために、私はする必要があります:アクセスフォームの書式設定をグローバルサブから変更する
将来の目標日が7日以上の場合、緑色に着色します。 対象日が将来7日以内または今日の場合、黄色に着色します。 過去の対象日付が赤色になっています。
それが達成された実際の日付がない限り、その場合:
実際の日付が目標日より前である場合、色緑色両方の日付 実際の日付が目標日より後であれば、色両方の日付赤。
フォームの読み込みや日付フィールドの変更(対象の日付は計算されますが、他のデータがフォームで変更された場合は変更されます)でこれを行う必要があるため、フォーム名、ターゲット日付、および実際の日付を変数として取ります。私は 'Me.txtbox'のローカルフォームモジュールでこれを行うために各ボックスをコーディングすることができました しかし、フォームとテキストボックスをパブリックサブから参照しようとすると、テキストを正しく参照していないようですフォーム上のボックス。フォームモジュールで
を望むように動作コードを、私はこれを行うための3つのまたは4種類の方法(文字列、textbox.nameなど)を試みたと私は近いんだような気がしますが、...
Private Sub txtFreqReqDate_AfterUpdate()
If Me.txtFreqReqDate <= Me.txtFreqReq Then
Me.txtFreqReq.Format = "mm/dd/yyyy[green]"
Me.txtFreqReqDate.Format = "mm/dd/yyyy[green]"
ElseIf Me.txtFreqReqDate > Me.txtFreqReq Then
Me.txtFreqReq.Format = "mm/dd/yyyy[red]"
Me.txtFreqReqDate.Format = "mm/dd/yyyy[red]"
ElseIf IsNull(Me.txtFreReqDate) = True Then
If Me.txtFreqReq < Now() Then
Me.txtFreqReq.Format = "mm/dd/yyyy[red]"
ElseIf Me.txtFreqReq >= (Now()+7) Then
Me.txtFreqReq.Format = "mm/dd/yyyy[yellow]"
ElseIf Me.txtFreqReq > (Now()+7) Then
Me.txtFreqReq.Format = "mm/dd/yyyy[green]"
Else
Me.txtFreqReq.Format = "mm/dd/yyyy[black]"
End If
Else
Exit Sub
End If
End Sub
おそらく、最も美しいものではありませんが、私はいつも建設的な批判に開放されています。私は毎回、テキストボックスの名前を変更し、このペアを22回以上書く必要があります。私は、テキストボックスの名前を取り、公共のサブを書きたいが、私は適切な組み合わせを見つけるように見えることはできません。
Private Sub txtFreqReqDate_AfterUpdate()
FormatBoxes(Me, me.txtFreqReqDate, me.txtFreqReq)
End Sub
、別のモジュールで:
Public Sub FormatBoxes(CurrentForm As Form, txtActual as Textbox, txtTarget as Textbox)
frmName = CurrentForm.name
tbActual = txtActual.Name
tbTarget = txtTarget.Name
If frmName.tbActual <= frmName.tbTarget Then
frmName.tbTarget.Format = "mm/dd/yyyy[green]"
frmName.tbActual.Format = "mm/dd/yyyy[green]"
ElseIf frmName.tbActual > frmName.tbTarget Then
frmName.tbTarget.Format = "mm/dd/yyyy[red]"
frmName.tbActual.Format = "mm/dd/yyyy[red]"
ElseIf IsNull(frmName.tbActual) = True Then
If frmName.tbTarget < Now() Then
frmName.tbTarget.Format = "mm/dd/yyyy[red]"
ElseIf frmName.tbTarget >= (Now()+7) Then
frmName.tbTarget.Format = "mm/dd/yyyy[yellow]"
ElseIf frmName.tbTarget > (Now()+7) Then
frmName.tbTarget.Format = "mm/dd/yyyy[green]"
Else
frmName.tbTarget.Format = "mm/dd/yyyy[black]"
End If
Else
Exit Sub
End If
End Sub
場合は申し訳ありませんこれはちょっと長いです、私はちょうど私の知恵の終わりです...
また、すべてのタイプミスのお詫び。私は別のマシンからこれを再入力しなければなりませんでした。
フォーム名を渡さないと、実際にはトリックは実行されませんでした。私はフォームへの参照を既にテキストボックスオブジェクトに含まれている必要があります推測しています...? –
@RickDawson、右のテキストボックスオブジェクトは、完全な階層が既にどこにあるかを知っています。 – Brad