2012-05-22 3 views
1

무언가가 많이 올 것이라고 생각합니다.

Access의 조건부 서식에서 모든 빈 필드를 형식화하는 방법이 있는지 알고 싶습니다. 필자의 경우 모든 필드는 일반적으로 입력해야하지만, 모든 경우에 포함되지는 않습니다.. 그래서 사용자를 제한하는 조건 코드를 작성하는 대신, 필드에 빨간색 배경을 표시하여 "이봐, 여기에 아무것도 없어. 네가 원했던 것이지?"

메시지 상자가 짜증나도록 타블렛 위에 있습니다. 따라서 조건부 서식이 적용됩니다. 나는 당신이 "Null ([Field])을 가질 수 있다는 것을 알고 있습니다. 그러나 그것은 30+ 필드에서 20+ 폼을 거쳐 적절한 필드 이름 등을 확인한 다음 개별적으로 조건을 입력해야합니다. 여러 항목을 선택하고 여러 항목에 대해 조건부 서식을 지정하고 "같음 : NULL"을 사용합니까?

"같음 : Null"을 시도했으나 작동하지 않습니다. : "" "(액세스 상수 사용) 이유는 무엇입니까? 아니면이 문제를 어떻게 해결할 수 있습니까? 또한 터치되지 않은 필드에 대해서만 필요합니다. 사용자가 입력을 시작한 다음 다시 공백으로 삭제하면 신경이 쓰이지 않는 상태로 유지하거나 빨간색으로 돌아갈 수 있으므로 더 좋은 방법이 있다면 눈이 다가옵니다.Null 조건부 서식 - MS Access Forms

편집 : 모든 양식에 붙여 넣을 일부 VBA 코드를 시작했습니다.

Private Sub Form_Load() 
Dim ctl As Control 
Dim reqCol As Long 
Dim focusCol As Long 
Dim doneCol As Long 
Dim format As FormatCondition 

reqCol = RGB(246, 180, 180) 
focusCol = RGB(252, 249, 238) 
doneCol = RGB(255, 255, 255) 

For Each ctl In Me.Controls 
    With ctl 
     Me.Controls(ctl.Name).FormatConditions.Delete 'Delete the existing conditions. 
     Me.Controls(ctl.Name).BackColor = doneCol 'Set the background color to the done color. 

     Select Case .ControlType 
      Case acTextBox 
       'Create the format objects. 
       format = Me.Controls(ctl.Name).FormatConditions.Add(acFieldValue, acEqual, "") 
       format = Me.Controls(ctl.Name).FormatConditions.Add(acFieldHasFocus) 

       'Format the filled in boxes (ie set back to red) 
       With Me.Controls(ctl.Name).FormatConditions(0) 
        .BackColor = reqCol 
        .Enabled = True 
       End With 

       'Format the current field color (ie set to beige) 
       With Me.Controls(ctl.Name).FormatConditions(1) 
        .BackColor = focusCol 
        .Enabled = True 
       End With 
     End Select 
    End With 
Next ctl 
End Sub 

문제는 FormatConditions.Add(acFieldValue, acEqual, "")이 같은 이유로 작동하지 않는다는 것입니다. 어떻게 해결할 수 있습니까? VBA로보고 기본 제공 조건에 결함이있는 경우 버그처럼 보입니다. 아니면 나 앞에서 뭔가 빠져있어.

+0

null을 빈 문자열과 연결하면 항상 빈 문자열이 생성됩니다. 'len ([Fieldname] & "") = 0'이 당신의 작업에 효과가 있습니까? – SeanC

+0

사실 .. 아직 각 필드에 대해 [Fieldname]을 수동으로 입력해야한다는 사실은 여전히 ​​남아 있습니다. 배치 솔루션이 필요해. VBA에서 코딩을 시작했지만 동일한 문제가 있습니다. 질문을 업데이트합니다. – StuckAtWork

답변

1

길이가 0 인 데이터를 표시하는 방법에 기본 형식을 설정하십시오. 조건부 서식에 대한 사용

Field Value Isgreater than''

과는 현장에서 텍스트로 표시하는 방법에 해당 형식을 설정합니다.

Screenshot of conditional formatting

당신은 교대로 여러 필드를 선택할 수 있습니다 +이 해결

+0

이것은 처음에 내가 한 일이지만, 사소한 일이 발생했습니다. 입력/탐색 할 때 빨간색으로 깜박입니다. 이미 선택된 항목이 있는지 여부에 관계없이 드롭 다운 메뉴를 빨간색으로 만들었습니다. 읽기가 어렵다. 나는보다 적게 시도 할 것이다 "또는 0! – StuckAtWork

0

에 적용하는 데 필요한 모든 적절한 필드를 선택하려면 디자인보기를 클릭합니다. 내 양식에 넣고 (그것을 모듈을 만들기로 보일 수 있습니다, 새로운 여기에, 어떻게 아직 확인되지 않음) 트릭 FormatConditions.Add(...)에 입력하는 방법이었다

Private Sub Form_Load() 
On Error Resume Next 

Dim ctl As Control 
Dim reqCol As Long 
Dim focusCol As Long 
Dim doneCol As Long 
Dim format As FormatCondition 
Dim expr As String 

reqCol = RGB(246, 180, 180) 
focusCol = RGB(252, 249, 238) 
doneCol = RGB(255, 255, 255) 

For Each ctl In Me.Controls 
    With ctl 
     'Delete the existing formatting 
     Me.Controls(ctl.Name).FormatConditions.Delete 
     Me.Controls(ctl.Name).BackColor = doneCol 

     Select Case .ControlType 
      Case acTextBox 
       expr = "IsNull(" & ctl.Name & ") = True" 
       'Create the format objects. 
       format = Me.Controls(ctl.Name).FormatConditions.Add(acFieldHasFocus) 
       format = Me.Controls(ctl.Name).FormatConditions.Add(acExpression, , expr) 

       'Format the filled in boxes (ie set back to focus color) 
       With Me.Controls(ctl.Name).FormatConditions(0) 
        .BackColor = focusCol 
        .Enabled = True 
       End With 

       'Format the current field color (ie set to required color) 
       With Me.Controls(ctl.Name).FormatConditions(1) 
        .BackColor = reqCol 
        .Enabled = True 
       End With 
     End Select 
    End With 
Next ctl 
End Sub 

. 내가 지금하고 싶은대로 정확하게 작동합니다.