2017-10-09 1 views
0

나는 사용자가 날짜를 입력하고 현재 날짜를 입력 할 수있는 VBA 코드를 사용하여 적절한 색으로 셀을 채우기 위해 사례 명세서 선택.사례 데이터를 사용하여 현재 데이터 +10 일을 비교하는 VBA 코드

셀을 빨간색으로 채워야 사용자가 현재 날짜 +10 일인 날짜를 입력해야합니다.

어떻게해야합니까?

코드는

Private Sub CommandButton1_Click() 

Dim i As Integer 
Dim objDate As Date 


MsgBox (objDate) 

For i = Range("C5000").End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment' 

    objDate = Date 

    Select Case VBA.CDate(Cells(i, 3)) 

    Case IsEmpty(i) 
     Cells(i, 3).Interior.ColorIndex = 0 

    Case Is < VBA.Date() 
     Cells(i, 3).Interior.Color = vbGreen 

    Case Is = VBA.Date() 
     Cells(i, 3).Interior.Color = vbYellow 

    Case Is > VBA.Date() 
     Cells(i, 3).Interior.Color = vbRed 


    End Select 
Next 

End Sub 
+0

왜 선언 후에'MsgBox' 권한을 가지 는가? ation? 어떤 값도 포함하지 않습니다. 날짜와 숫자는 0으로 초기화됩니다. 따라서 00:00:00 만 표시됩니다. 그리고 objDate의 목적은 무엇입니까? 코드에서 아무 데나 사용하지 마십시오. 오버 헤드에 추가하는 것만으로 루프 내에서 동일한 값을 할당합니다. – Mahesh

답변

0

여기에 그 작업을 수행하는 또 다른 방법입니다. 테스트 표현식으로 두 날짜의 차이점을 확인한 다음 각 사례 (즉, 0보다 작거나 같은지 또는 차이가 10보다 큰지 여부)를 확인합니다. 당신이 그것을 의도로 i (카운터가) 비어 있거나없는 경우 확인하고 있기 때문에

If IsEmpty(Cells(i, 3)) Then Exit Sub 
Select Case (VBA.CDate(Cells(i, 3)) - VBA.Date()) 
    Case Is < 0 
     Cells(i, 3).Interior.Color = vbGreen 
    Case 0 
     Cells(i, 3).Interior.Color = vbYellow 
    Case Is > 10 
     Cells(i, 3).Interior.Color = vbRed 
    Case Else 
     'Colour to be applied if the difference is between 1 and 10 (both inclusive) 
End Select 

또한, IsEmpty의 테스트가 작동하지 않습니다. 항상 False을 반환합니다. 셀 외에도 ​​이미 ColorIndex이 있습니다. 따라서 이전에 비어 있지 않은 셀이 비어 있는지 여부를 코드에서 확인하지 않으면 Cells(i, 3).Interior.ColorIndex = 0 부분이 필요하지 않습니다.

는 업데이트 : 재미있는 실험으로

, 나는 결과가 모습보고 그것을 밖으로 시도하고, 여기에 스크린 샷입니다 : 영업 didn를 이후 :

Macro in action

PS 그 차이가 1과 10 사이 일 때의 색깔을 언급 할 때, 나는 그 세포들을 흑색으로 색칠했다 :-P

관련 문제